如何在Winform中更新dataGridView行值

本文关键字:更新 dataGridView 行值 Winform | 更新日期: 2023-09-27 18:16:13

我有一个dataGridview的第一列是Checkbox。现在根据我的要求,我要更新复选框选择上的dataGridView行的值。我希望它像复选框被点击为一个特定的行,该行应该成为可编辑的,任何输入应该更新更新按钮点击。

这是代码,我有gridview和复选框..

    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; 
    }

如何在Winform中更新dataGridView行值

首先要做的是确保GridView中唯一可编辑的列是带有复选框的列。因此,在完成将数据加载到网格中之后,需要添加以下内容:

foreach (DataGridViewColumn dc in dataGridView1.Columns)
{
    if (dc.Index.Equals(0))
    {
        dc.ReadOnly = false;
    }
    else
    {
        dc.ReadOnly = true;
    }
}

这只是将除第一列之外的所有列设置为只读。

现在您有了列,并且可以单击复选框,我们需要以某种方式处理复选框状态的更改。现在,信不信由你,为了使它正常工作,我们需要处理两个事件。这是有充分理由的。你看,如果我们为包含复选框的单元格处理cellvaluechange事件,它不会触发,直到用户在单击单元格后离开它。这被认为是编辑单元格的正式结束。当复选框有问题时,当然不会这样做,因为我们需要在单击事件后立即处理事件。为了做到这一点,我们将处理第二个事件——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;
            }
        }
    }
}