我有一个主要使用图形编辑器制作的Windows窗体。它连接到名为Database1
的数据库。数据库中的一个表名为Table1
,包含列CheckBox1
。当我将表单连接到数据库时,会自动创建Database1DataSet.xsd
和Database1DataSet.Designer.cs
。
CheckBox1
可以保持“是”或空白(这不是我的决定)。如果CheckBox1
列中的值为“是”,我想复选一个复选框,如果值为空,则取消选中。如果我将绑定的复选框拖到窗体上,它就不起作用,因为我假设列中的值需要为1或0.所以我试图解决这个问题。
在我的表格中,我有以下
// Form Constructor
public myForm()
{
// Initializes all the components in the form
InitializeComponent();
// Change the checkboxes checked state
this.myCheckBox.Checked = myCheckBox_Update();
}
// Method for determining if the checkbox should be checked
private bool myCheckBox_Update()
{
// This SHOULD bring in the current record of the database
DataRowView current = (DataRowView)this.Table1BindingSource.Current;
try
{
// This SHOULD determine if the value in the CheckBox1 field has a value
return current.Row["CheckBox1"].ToString().Length > 0;
}
catch (NullReferenceException ex)
{
MessageBox.Show("NullReferenceException was thrown!", "Error");
return false;
}
}
在InitializeComponent()
功能中,有以下
// This line is generated when I drag a bound checkbox to the form
// this.myCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("CheckState", this.Table1BindingSource, "CheckBox1", true));
// For the miscellaneous information about the checkbox
this.myCheckBox.AutoSize = true;
this.myCheckBox.Location = new System.Drawing.Point(3, 3);
this.myCheckBox.Name = "myCheckBox";
this.myCheckBox.Size = new System.Drawing.Size(92, 23);
this.myCheckBox.TabIndex = 0;
this.myCheckBox.Text = "Check Box";
this.myCheckBox.UseVisualStyleBackColor = true;
然而,它不断抛出NullReferenceException
。我假设这是因为this.Table1BindingSource.Current
无法转换为DataRowView
。
我已经查看了与此问题有些相关的其他几个帖子(例如This post或this post),但我还没有找到任何有效的方法。第二个链接的答案不起作用,因为我使用this.Table1BindingSource.MoveNext();
迭代记录,我不知道索引。
有人能引导我朝着正确的方向前进吗?我真的很感激
编辑:使用此
初始化BindingSourceprivate System.Windows.Forms.BindingSource Table1BindingSource;
this.Table1BindingSource = new System.Windows.Forms.BindingSource(this.components);
答案 0 :(得分:0)
我会把它放在答案中,因为它不适合发表评论。
您也可以尝试在try语句中检查null值。
try
{
// This SHOULD determine if the value in the CheckBox1 field has a value
object val = current.Row["CheckBox1"];
if (val == null)
{
return false;
}
else
{
return current.Row["CheckBox1"].ToString().Length > 0;
}
}
或者至少在if(val == null)语句中设置断点,并确保val具有您期望的值。
如果用'blank'表示String.Empty,那么你的代码就可以按预期工作,但如果blank表示null,那么你必须检查null,你不能调用ToString()在空值上。
答案 1 :(得分:0)
我最终做的只是将数据库中的值从“是”和空白更改为1和0.然后在InitializeComponent()方法中,我添加了以下行(或者如果您可能为您生成从数据源面板中拖出它)
this.myCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("CheckState", this.Table1BindingSource, "CheckBox1", true));