以编程方式检查 DataGridView 中的“CheckBoxCell”
本文关键字:CheckBoxCell 中的 DataGridView 编程 方式 检查 | 更新日期: 2023-09-27 18:36:50
目前,我的应用程序将从SQL数据库中加载用户可以选择的项目,然后他们可以使用复选框选择哪些项目适用于自己,然后可以保存这些选择并退出窗口;这工作正常。
我需要让我的应用程序获取用户以前保存的选择,然后在网格填充所有选项后选中相关框(因此只显示他们的选择)。
到目前为止,我有以下代码:
private void LoadUserSelection()
{
using (SqlConnection conn = new SqlConnection(sys.gvConnectionString))
{
using (SqlCommand cmd = new SqlCommand(qry.SelectUsersSelections(), conn))
{
cmd.Parameters.AddWithValue("@SiteID", sys.gvSiteID);
using (SqlDataAdapter da = new SqlDataAdapter())
{
da.SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
conn.Open();
da.Fill(dt);
conn.Close();
foreach (DataGridViewRow row in grdQueues.Rows)
{
foreach (DataRow dr in dt.Rows)
{
if (dr["ID"].ToString() == row.Cells["ID"].Value.ToString())
{
DataGridViewCheckBoxCell chk = (DataGridViewCheckBoxCell)row.Cells[0];
chk.Value = 1;
}
}
}
}
}
}
}
}
希望这段代码有意义,它可以毫无问题地运行,但是即使代码实际上点击了将复选框标记为 true 的部分,它也没有。
我已经尝试了以下 chk 替代方案。值 = 1
- 中国.值 = 真值;
- 中国.已选择 = 真;
- 中国.值 = 真;
由于这是一个多用户数据库,我不能简单地根据预定列表存储布尔值,因此为什么首先获取和填充预定列表,然后我尝试操作他们以前的选择。
注意:我不太确定我在上面所做的甚至是解决这个问题的最佳方法,所以作为奖励,如果有人对我如何嵌套 using 语句或我如何处理这个问题有任何提示,将不胜感激。
使用以下
两个选项之一,您的代码是正确的:
chk.Value = 1; // Or...
chk.Value = true;
我可以复制此问题的唯一方法是在表单构造函数中手动添加DataGridViewCheckBoxColumn
。否则,当该列也是原始DataTable
的一部分时,您的代码在我的测试中始终有效。因此,假设该构造函数中的工作流是:
DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn();
// any col Properties manually set
dataGridView1.Columns.Add(col);
dataGridView1.AllowUserToAddRows = false;
dataGridView1.DataSource = LoadAllData();
LoadUserSelection();
您将看到LoadUserSelection
按预期正确运行,但由于构造期间的绑定行为,您看不到结果。如果要在其他任何地方调用方法(如Button.Click
事件),则可能会看到结果。如果您希望在加载数据后出现这种行为,以下内容对我有用:
this.dataGridView1.DataBindingComplete += DataGridView1_DataBindingComplete;
private void DataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
this.LoadUserSelection();
}