将数据库中的字符串显示为复选框
本文关键字:显示 复选框 字符串 数据库 | 更新日期: 2023-09-27 18:02:50
我有一个主要使用图形化编辑器制作的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.Table1BindingSource.MoveNext();
迭代记录,并且我不知道索引。
编辑:BindingSource被初始化为this
private System.Windows.Forms.BindingSource Table1BindingSource;
this.Table1BindingSource = new System.Windows.Forms.BindingSource(this.components);
我将把它放在答案中,因为它不适合注释。
你也可以试着在你的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'表示字符串。空,那么你的代码将工作如你所期望的,但如果空白意味着null,那么你必须检查null,你不能调用ToString()对一个空值
我最终做的只是将数据库中的值从"是"和空白更改为1和0。然后在InitializeComponent()方法中,我添加了以下行(如果您从数据源面板中拖动它,它可能会为您生成)
this.myCheckBox.DataBindings.Add(new System.Windows.Forms.Binding("CheckState", this.Table1BindingSource, "CheckBox1", true));