c #datagridview复选框

时间:2016-10-20 06:50:30

标签: c# datagridview

如何从数据库中提取数据并进行更改,以便在数据等于“Y”时,您可以选中数据网格视图中的复选框。

我已经通过stackoverflow搜索了一个答案,但没有成功。任何帮助将不胜感激

代码的'**'部分是我遇到问题的地方。

到目前为止我的代码:

using(getConnection.sqlCmd = new SqlCommand(sqlQuery,getConnection.sqlcon))
            {
                using(var reader = getConnection.sqlCmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        col1 = reader.GetValue(0).ToString();
                       **foreach(DataGridView row in dgvAccident.Rows)
                       {
                           DataGridViewCheckBoxCell chk = dgvAccident.Rows[0].Cells[4] as DataGridViewCheckBoxCell;
                           if (col1.Equals('Y'))
                               chk.Selected = true;
                           else
                               chk.Selected = false;
                       }**
                    }

                }
            }

2 个答案:

答案 0 :(得分:0)

使用Value的{​​{1}}属性代替DataGridViewCell

Selected

但您的代码似乎已关闭。您将重新检查从DB返回的每一行的所有行复选框。您应该检查 foreach(DataGridView row in dgvAccident.Rows) { dgvAccident.Rows[0].Cells[4].Value = (col1.Equals('Y')); } 行是否对应于从DB返回的行,然后检查值。

答案 1 :(得分:0)

经过大量的反复试验后,我终于想出了一个完美无缺的解决方案

 using(getConnection.sqlCmd = new SqlCommand(sqlQuery,getConnection.sqlcon))
            {
                using(var reader = getConnection.sqlCmd.ExecuteReader())
                {
                    int x = 0;
                    try
                    {
                        while (reader.Read())
                        {
                            col1 = reader.GetValue(0).ToString();

                            if (col1.Equals("Y"))
                            {
                                dgvAccident.Rows[x].Cells[4].Value = true;
                                ++x;
                            }
                            else
                                if (col1.Equals("N"))
                                {
                                    dgvAccident.Rows[x].Cells[4].Value = false;
                                    ++x;
                                }
                        }
                    }

请注意,我确实把它放在一个尝试并捕获,以确保如果程序运行索引越界我捕获错误,我强烈建议任何人使用此代码将其放在try catch中。