0

我有一个要可视化和使用的数据集。我使用 DataGridView 组件来显示它的表格,但是在添加新行/编辑现有行时,我不想使用 DataGridView 的功能:我想显示一个自定义表单,使用 TextBoxes 和 ComboBoxes 等等,和确定/取消按钮。

有一个包含 Name (string)、Forme (string)、Image (byte[])、Attr1 (string)、Attr2 (string)、IsSpecial (bool) 列的表。Forme 和 Attr2 可以为空,其他都不是,并且 Image 应该包含一张图片。此外,必须从另一个表(具有 ID(长)、名称(字符串)列)中查找 Attr1 和 Attr2。

所以我创建了一个新表单,在其上放置了两个文本框、一个图片框、两个组合框和一个复选框。我已经有一个问题:如何在文本框/组合框中表示 DBNull?

接下来,绑定本身。我想我必须做这样的事情:

class MainForm
{
    // ...
    private void btAdd_Click(object sender, EventArgs e)
    {
        using (EditFrom editForm = new EditForm())
        {
            // I have to create a new row, right?
            var newRow = theTable.newStrongTypedRow();

            if (editForm.ShowData(binding) == DialogResult.OK)
                theTable.addStrongTypedRow(newRow);
        }
    }

    private void btEdit_Click(object sender, EventArgs e)
    {
        using (EditFrom editForm = new EditForm())
        {
            if (editForm.ShowData(binding) == DialogResult.OK)
                binding.EndEdit();
            else
                binding.CancelEdit();
        }
    }
}

class EditForm
{
    // ...
    public DialogResult ShowData(SomeBinding binding)
    {
        // tie the controls to the datarow which is being edited right now
        BindAllControls(binding);

        // let the user input the data
        return ShowDialog();
    }
}

但是我对“SomeBinding”有什么用呢?BindAllControls() 里面有什么?或者也许我把这一切都颠倒了,这不是我应该如何表示/编辑数据?也许有人可以推荐一本关于这个主题的书?

4

1 回答 1

0

我认为您会希望使用 BindingSource 来处理所有绑定。您可以将控件配置为绑定到 BindingSource,它应该处理控件和 DataSet 之间的所有转换。

绑定可以这样设置: this.nameTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.testDataBindingSource, "Name", true)); 您可以将 BindingSource 作为“SomeBinding”传入。

于 2012-06-06T18:18:59.640 回答