绑定组合框中的空项
本文关键字:组合 绑定 | 更新日期: 2023-09-27 18:01:44
我如何在使用NULL
作为插入或更新值的绑定ComboBox
中有一个空项?
inspector_id
是FK关系的主键。我必须设置inspector_id = -1
,因为c#不允许int
为null
。但是,插入(或更新)失败,因为数据库中没有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);
}
找到了!绑定到一个视图,而不是表。
将inspector_idComboBox
绑定到检查表的新SQL Server视图。
SELECT NULL as inspector_id, '(none)' as fullName, '' as employeeCode
UNION
SELECT inspector_id, fullName, employeeCode
FROM dbo.inspector
优点:
- 选择项目时,
SelectedItem
和文本将持续存在。 - SQL视图允许
inspector_id
为NULL值 - 在应用程序代码中不需要变通。只需从视图中填充
DataSet
即可。 - 允许更大的灵活性,因为关系没有绑定。
(none)
项在ComboBox
…辉煌!
另一种方法是在选择(none)
时清除ComboBox
:
private void inspector_idComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (inspector_idComboBox.SelectedValue != null)
if ((int)inspector_idComboBox.SelectedValue == -1)
inspector_idComboBox.SelectedItem = null;
}
优点:
- 正确的NULL值保存到DataSet并发送到数据库。
- 不需要外部清除按钮。
缺点:
- 选择
(none)
也会清除文本。我希望(none)
保持选中状态。
在尝试了各种方法之后,我最初决定采用以下方法:
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
。
优点:
-
ComboBox
清除。 -
tableAdapter
设置item.inspector_id = NULL
缺点:
- 其他绑定到
inspector
字段的表单控件保持不变(因为没有"空"inspector
行可以使用)。 - 当
SelectedItem
为空时,inspector_idComboBox
不显示任何文本。我更喜欢在框中显示(none)
之类的东西。