C# Winform中的Int字段不使用C更新SQL Server数据库中的空值#
在我的Winforms C#应用程序中,我有数据类型为C# Winform中的Int字段不使用C更新SQL Server数据库中的空值#,c#,winforms,sql-server-2012,C#,Winforms,Sql Server 2012,在我的Winforms C#应用程序中,我有数据类型为Int的字段,它们被设置为接受SQL Server数据库中的空值(允许空值) 在表单中,我有一些文本框,它们绑定到那些int数据类型字段。如果我在创建新记录时没有输入任何内容,它会接受。如果我在文本框中输入一个数字,它也会接受它,如果我删除它,它将不再接受它,甚至不允许我移动到下一个字段 如果通过代码将其值设置为null或“,它将忽略甚至不更新我在其他非int文本字段中所做的更改 我正在使用以下方法进行更新 this.Validate();
Int
的字段,它们被设置为接受SQL Server数据库中的空值(允许空值)
在表单中,我有一些文本框,它们绑定到那些int数据类型字段。如果我在创建新记录时没有输入任何内容,它会接受。如果我在文本框中输入一个数字,它也会接受它,如果我删除它,它将不再接受它,甚至不允许我移动到下一个字段
如果通过代码将其值设置为null或“
,它将忽略甚至不更新我在其他非int文本字段中所做的更改
我正在使用以下方法进行更新
this.Validate();
this.itemsbindingSource.EndEdit();
this.tableAdapterManager.UpdateAll(this.sBSDBDataSet);
如何使文本框接受空值
我试过跟随
IDTextBox.Text = "";
IDTextBox.Text = null;
文本框不接受空值 您可以检查它是否为null,并设置String.Empty
If(dbValue == null)
{
IDTextBox.Text = String.Empty;
}
else
{
// here set value to your textbox
}
在上述解决方案的帮助下(特别是Ivan先生),我尝试了以下方法,结果就是这样 要清除表单上的int字段,请执行以下操作:
IDTextBox.Text = String.Empty;
然后,根据Ivan先生的建议,我在表单的Designer.cs文件中搜索“IDtextbox.DataBindings.Add”并替换
this.IDTextBox.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.itemsbindingSource, "PictureID", true));
与
我花了一整天的时间来搜索,最后我把我的问题发布在这里,一个小时就解决了。这似乎是WF数据绑定的错误之一。我不能确切地说是什么导致了它,但为了使它工作,应该将属性设置为“”(空字符串,默认值为
null
)
我在designer中找不到这样做的方法,而且查找所有需要的文本框也会很烦人。因此,我建议您采用以下快速而肮脏的方法。创建一个助手方法,如下所示:
public static class ControlExtensions
{
public static void FixTextBoxBindings(this Control control)
{
if (control is TextBox)
{
foreach (Binding binding in control.DataBindings)
if (binding.NullValue == null) binding.NullValue = "";
}
foreach (Control child in control.Controls)
child.FixTextBoxBindings();
}
}
然后只需在表单Load
事件中包含以下内容:
this.FixTextBoxBindings();
嗨,姆维斯尼基。这一次我有两个错误。1.dbValue->名称dbValue在当前上下文中不存在。2.String.Empty()->不可调用的成员“String.Empty”不能像方法一样使用。我遗漏了什么吗?“dbValue”是一个变量,您可以尝试将其设置为textbox,但不能将null设置为textbox,因此您必须检查它是否为null集空字符串。嗨,mwisnicki。我已经试过了,但仍然不起作用。var dbValue=(字符串)null;if(dbValue==null){IDTextBox.Text=String.Empty;}else{/}显示所有代码。因为我不知道你想做什么。不能强制转换并设置为字符串null。展示你所做的这就是我最初想要做的。private void btnRmvPic_Click(object sender,EventArgs e){if(picturepturebox.Image!=null){IDTextBox.Text=null;}}}基于此,我需要在数据库中更新null值。此ID实际上是图片表中的唯一ID。如果我将其设置为Null,图片将不会显示在表单中,这就是我正在尝试做的。您将作为
itemsBindingSource
的DataSource
使用什么作为itemsBindingSource
?数据源是'sBSDBDataSet'。但那是什么sBSDBDataSet
?记住我们没有你的代码,看看这个问题,这就是我们看到的。嗨,Ivan,sBSDBDataSe是我在表单上使用的数据集名称。我使用sqlserver数据库中的“添加新数据源”在VisualStudioWindowsForm项目中添加了数据源。然后我简单地将这个添加的数据集拖到表单上,并将其重命名为“sBSDBDataSet”。然后,我使用工具箱控件将“itemsbindingSource”、ItemStableApter和tableAdapterManager添加到表单中。因此,通过这种方式,我的表单使用以下.itemsTableAdapter.Fill(this.sBSDBDataSet.Items)加载数据:;方法。然后我简单地添加了我在上面共享的更新代码。问题很可能是由数据绑定引起的。如何创建它们-使用设计器还是通过代码?
this.FixTextBoxBindings();