我如何在绑定ComboBox
中使用NULL
作为插入或更新的值的空项?
使用下面的代码,我可以手动添加其他行。列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);
}
答案 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
<强>优点:强>
(none)
项目位于ComboBox
SelectedItem
和文字仍然存在。inspector_id
DataSet
即可。......太棒了!
答案 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
。
优点:
ComboBox
清除。tableAdapter
设置item.inspector_id = NULL
<强>缺点:强>
inspector
字段的其他表单控件保持不变(因为没有“空”inspector
行可供使用)。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;
}
<强>优点:强>
<强>缺点:强>
(none)
也会清除文字。我希望(none)
保持选中状态。