绑定ComboBox中的NULL空项

时间:2014-05-05 20:51:28

标签: c# .net winforms data-binding

我如何在绑定ComboBox中使用NULL作为插入或更新的值的空项?

使用下面的代码,我可以手动添加其他行。列inspector_id是FK关系的主键。我必须设置inspector_id = -1,因为C#不允许intnull。但是,插入(或更新)失败,因为数据库中没有inspector_id: -1

private void ItemInfo_Load(object sender, EventArgs e)
{
    // TODO: This line of code loads data into the 'someDBDataSet.inspector' table. You can move, or remove it, as needed.
    this.inspectorTableAdapter.ClearBeforeFill = false;
    someDBDataSet.inspectorRow newRow = this.someDBDataSet.inspector.NewinspectorRow();
    newRow.inspector_id = -1; // Since an int in C# cannot be null
    newRow.fullName = "(none)";
    newRow.employeeCode = "";
    this.someDBDataSet.inspector.AddinspectorRow(newRow);

    this.inspectorTableAdapter.Fill(this.someDBDataSet.inspector);
    //this.inspectorTableAdapter.ClearBeforeFill = false;
    // TODO: This line of code loads data into the 'someDBDataSet.item' table. You can move, or remove it, as needed.
    this.itemTableAdapter.Fill(this.someDBDataSet.item);
}

3 个答案:

答案 0 :(得分:3)

尤里卡!绑定到视图,而非桌子。

inspector_idComboBox绑定到检查器表的新SQL Server视图。

SELECT NULL as inspector_id, '(none)' as fullName, '' as employeeCode
UNION
SELECT inspector_id, fullName, employeeCode
FROM dbo.inspector

<强>优点:

  1. (none)项目位于ComboBox
  2. 选择项目时,SelectedItem和文字仍然存在。
  3. SQL视图允许inspector_id
  4. 的NULL值
  5. 应用程序代码中不需要解决方法。只需填写视图中的DataSet即可。
  6. 由于没有约束关系,因此可以提供更大的灵活性。
  7. ......太棒了!

答案 1 :(得分:0)

在尝试了各种方法之后,我最初决定了以下内容:

private void ItemInfo_Load(object sender, EventArgs e)
{
    this.inspectorTableAdapter.Fill(this.someDBDataSet.inspector);
    this.itemTableAdapter.Fill(this.someDBDataSet.item);
}

private void noInspector_btn_Click(object sender, EventArgs e)
{
    inspector_idComboBox.SelectedItem = null;
}

我没有在ComboBox中添加虚拟项目,而是添加了一个(链接)按钮来清除ComboBox

优点:

  1. ComboBox清除。
  2. tableAdapter设置item.inspector_id = NULL
  3. <强>缺点:

    1. 绑定到inspector字段的其他表单控件保持不变(因为没有“空”inspector行可供使用)。
    2. inspector_idComboBox为空时,SelectedItem中不会显示任何文字。我希望在框中显示(none)之类的内容。

答案 2 :(得分:0)

另一种方法是在选择ComboBox时清除(none)

private void inspector_idComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    if (inspector_idComboBox.SelectedValue != null)
        if ((int)inspector_idComboBox.SelectedValue == -1)
            inspector_idComboBox.SelectedItem = null;
}

<强>优点:

  1. 将正确的NULL值保存到DataSet并发送到数据库。
  2. 无需外部清除按钮。
  3. <强>缺点:

    1. 选择(none)也会清除文字。我希望(none)保持选中状态。