我有一个dataGridview,其第一列是Checkbox.Now根据我的要求我想在复选框的选择上更新dataGridView行的值。我希望它像单击一个特定行的复选框一样,该行应该变为可编辑状态,输入的任何内容都应在更新按钮单击时更新。
这是我对gridview和Checkbox的代码..
private void btn_load_Click(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("Select", System.Type.GetType("System.Boolean"));
dt.Columns.Add("UserName");
dt.Columns.Add("EmpID");
DataRow dr;
//Connection lines
connection.Open();
using (MySqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
dr = dt.NewRow();
dr["Select"] = false;
dr["UserName"] = reader["UserName"].ToString();
dr["EmpID"] = reader["EmpID"].ToString();
dt.Rows.Add(dr);
}
}
}
dataGridView1.AllowUserToAddRows = true;
dataGridView1.AllowUserToDeleteRows = true;
dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView1.DataSource = dt;
}
请帮帮我。谢谢。
答案 0 :(得分:0)
要做的第一件事是确保GridView中唯一可编辑的列是带复选框的列。 因此,在完成将数据加载到网格中之后,需要添加:
foreach (DataGridViewColumn dc in dataGridView1.Columns)
{
if (dc.Index.Equals(0))
{
dc.ReadOnly = false;
}
else
{
dc.ReadOnly = true;
}
}
这只是将除第一列之外的所有列都设置为只读。
现在您已经拥有了列并且可以单击复选框,我们需要以某种方式处理复选框状态的更改。现在,不管你信不信,为了让它正常工作,我们需要处理两个事件。这是有充分理由的。你看,如果我们处理包含复选框的单元格的CellValueChanged事件,它将不会触发,直到用户单击它后离开单元格。这被认为是编辑单元格的官方结束。当复选框有问题时,当然不会这样做,因为我们需要在点击它时立即处理它。为了做到这一点,我们将处理第二个事件 - CellMouseUp,并在该处理程序中强制编辑完成。它应该看起来像这样:
private void dataGridView1_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == 0 && e.RowIndex != -1)
{
dataGridView1.EndEdit();
}
}
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0 && e.RowIndex != -1)
{
foreach (DataGridViewColumn dc in dataGridView1.Columns)
{
if (!dc.Index.Equals(0))
{
dc.ReadOnly =
!(bool)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
}
}
}
}