将数据库中的字符串显示为复选框

本文关键字:显示 复选框 字符串 数据库 | 更新日期: 2023-09-27 18:02:50

我有一个主要使用图形化编辑器制作的Windows窗体。它连接到一个名为Database1的数据库。数据库中有一个表叫做Table1,包含CheckBox1列。当我将表单连接到数据库时,将自动创建Database1DataSet.xsdDatabase1DataSet.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));