Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Winform中的Int字段不使用C更新SQL Server数据库中的空值#_C#_Winforms_Sql Server 2012 - Fatal编程技术网

C# Winform中的Int字段不使用C更新SQL Server数据库中的空值#

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();

在我的Winforms C#应用程序中,我有数据类型为
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();