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

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

问题描述

我想要处理 DataGridView 事件 CheckBox 列c $ c>并根据列检查值(true / false)执行操作。我试图使用 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 中显示我的表的代码是: p>

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天全站免登陆