C# DataGridView 复选框选中事件 [英] C# DataGridView Checkbox checked event

查看:148
本文介绍了C# DataGridView 复选框选中事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的 DataGridView 中处理 CheckBox 列的 Checked 事件,并根据列检查值(真/假)执行操作.我尝试使用 CellDirtyStateChanged 没有任何成功.事实上,我想在用户选中或取消选中复选框后立即检测选中的更改.

I want to handle Checked event of CheckBox columns in my DataGridView and perform an operation based on column checked value (true/false). I tried to use CellDirtyStateChanged without any success. In fact I want to detect checked change immediately after the user checks or unchecks the check box.

这是关于我的应用程序的描述.我是 c# 的新手,正在为一个为旅行者提供客房的地方制作预订我的房间"应用程序.这个屏幕可以很好地解释我希望实现的目标;

Here is a description about my application. I am new to c# and making a "book my room" app for a place which provides guest housing to travelers. This screen may explain well what I wish to achieve;

这是一个

DataGridView 中显示我的表格的代码是:

Code for displaying my table in DataGridView is:

OleDbConnection connection = new OleDbConnection();
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = "select id,cusid,cusname,timein,
timeout,duration,amount,remark from entry";
command.CommandText = query;
OleDbDataAdapter da = new OleDbDataAdapter(command);
DataTable dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;

我使用这个添加了复选框列;

I added the checkbox column using this;

DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn();
checkColumn.Name = "logout";
checkColumn.HeaderText = "Logout";
checkColumn.Width = 50;
checkColumn.ReadOnly = false;
checkColumn.FillWeight = 10;
dataGridView1.Columns.Add(checkColumn);

每当用户从登录屏幕登录时,表中都会插入一个新行,因此 dgv 将更新,并带有相应的用户条目.我不明白如何将这些复选框与 datagridview 链接我尝试过 celldirtystatechanged 但没有任何效果,将行与复选框关联的正确方法是什么.

Whenever a user logs in from the login screen a new row will be inserted in the table and hence the dgv will be updated, with corresponding users entry. I don't understand how to link those checkboxes with datagridview I tried celldirtystatechanged but nothing works, what would be the right way to associate the row with checkbox.

推荐答案

您可以处理 CellContentClick 你的 DataGridView 事件并把更改这些单元格的逻辑.

You can handle CellContentClick event of your DataGridView and put the logic for changing those cells there.

关键是使用 CommitEdit(DataGridViewDataErrorContexts.Commit) 将当前单元格中的更改提交到数据缓存而不结束编辑模式.这样,当您在此事件中检查单元格的值时,它会返回您在单击后当前在单元格中看到的当前选中或未选中的值:

The key point is using CommitEdit(DataGridViewDataErrorContexts.Commit) to commits changes in the current cell to the data cache without ending edit mode. This way when you check for value of cell in this event, it returns current checked or unchecked value which you see in the cell currently after click:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    //We make DataGridCheckBoxColumn commit changes with single click
    //use index of logout column
    if(e.ColumnIndex == 4 && e.RowIndex>=0)
        this.dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);

    //Check the value of cell
    if((bool)this.dataGridView1.CurrentCell.Value == true)
    {
        //Use index of TimeOut column
        this.dataGridView1.Rows[e.RowIndex].Cells[3].Value = DateTime.Now;

        //Set other columns values
    }
    else
    {
        //Use index of TimeOut column
        this.dataGridView1.Rows[e.RowIndex].Cells[3].Value = DBNull.Value;

        //Set other columns values
    }
}

这篇关于C# DataGridView 复选框选中事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆