C#DataGridView复选框检查事件 [英] C# DataGridView Checkbox checked event
问题描述
我想要处理在
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屋!