C# 选中datagridview中的复选框时显示消息框
我有一个这样的数据库(查看C# 选中datagridview中的复选框时显示消息框,c#,winforms,datagridview,C#,Winforms,Datagridview,我有一个这样的数据库(查看DataGridView): 如上图所示,DataGridView中有复选框。我想当复选框被选中时,messagebox会显示一些文本 我怎样才能做到这一点 我尝试过的是,每当我选中复选框时,messagebox就不会出现,并且在我运行程序时会选中2014年1月的第一行列,但当我取消选中并再次选中时,messagebox就不会出现 以下是我正在使用的代码: private void Amount(object sender, DataGridViewCellEvent
DataGridView
):
如上图所示,DataGridView
中有复选框。我想当复选框被选中时,messagebox会显示一些文本
我怎样才能做到这一点
我尝试过的是,每当我选中复选框时,messagebox就不会出现,并且在我运行程序时会选中2014年1月的第一行列,但当我取消选中并再次选中时,messagebox就不会出现
以下是我正在使用的代码:
private void Amount(object sender, DataGridViewCellEventArgs e)
{
DataTable _dt = (DataTable)dataGridView1.DataSource;
foreach(DataGridViewRow _row in _dt.Rows)
{
if (Convert.ToBoolean(_row.Cells["4"].Value) == true)
{
MessageBox.Show("Checked");
}
}
}
我把它叫来:
dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(this.Amount);
我通过数据库手动添加了复选框,下面是我的access数据库,如下所示:
非常感谢你的回答!谢谢大家!
更新:
下面的代码是我修改过的Daniloloko爵士的代码,我使用了列表
,因为我要检查的ColumnIndex大于1:
dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(this.Amount);
List<int> _columnIndexes;
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
private void Amount(object sender, DataGridViewCellEventArgs e)
{
_columnIndexes = new List<int>(new int[] { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 });
foreach (int index in _columnIndexes)
{
if (e.ColumnIndex == index)
{
var value = ((DataGridView)sender).Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
if (value != null)
{
if (Convert.ToBoolean(value) == true)
{
MessageBox.Show("Checked. \n" + "Column Number: " + e.ColumnIndex + "", "Checked");
}
else
{
MessageBox.Show("Not Checked. \n" + "Column Number: " + e.ColumnIndex + "", "Not Checked");
}
}
}
}
}
dataGridView1.CellValueChanged+=新的DataGridViewCellEventHandler(this.Amount);
列出索引;
私有void dataGridView1\u CurrentCellDirtyStateChanged(对象发送方,事件参数e)
{
if(dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommittedIt(DataGridViewDataErrorContexts.Commit);
}
}
私有无效金额(对象发送方、DataGridViewCellEventArgs e)
{
_columnIndexes=新列表(新int[]{3,4,5,6,7,8,9,10,11,12,13,14});
foreach(int索引在_columnIndexes中)
{
如果(例如,ColumnIndex==索引)
{
var value=((DataGridView)sender.Rows[e.RowIndex]。单元格[e.ColumnIndex]。value.ToString();
if(值!=null)
{
if(Convert.ToBoolean(value)==true)
{
Show(“选中。\n”+”列编号:“+e.ColumnIndex+”,“选中”);
}
其他的
{
MessageBox.Show(“未选中。\n”+”列编号:“+e.ColumnIndex+”,“未选中”);
}
}
}
}
}
但是从上面的代码来看,仍然是MessageBox.Show(“未选中”)代码>或MessageBox.Show(“选中”)每当我选中或取消选中DataGridView
(在运行时)中的复选框时,code>不会显示。我想要的是,每当我选中或取消选中复选框后,MessageBox
就会显示,而不是当我点击Enter
或Update
按钮时,MessageBox
就会显示(取决于我的复选框是否取消选中或取消选中)
多谢各位
对不起,让你们更困惑了
已解决:
我忘了声明dataGridView1.CurrentCellDirtyStateChanged+=newEventHandler(this.DirtyStateChanged)代码>在表单中加载
非常感谢,很抱歉把你们搞糊涂了
尊敬。如果您将金额与名为CellValueChanged的事件关联,则每次加载网格时,该金额都会增加。决心
但是,如果需要在加载网格后检测所检查的行,则需要使用dataGridView1的CurrentCellDirtyStateChanged事件:
编辑:dataGridView1.CurrentCellDirtyStateChanged+=new EventHandler(this.DirtyStateChanged);//声明并将其放在加载表单上
private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
}
dataGridView1的CellValueChanged事件如下:
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (dataGridView1.IsCurrentCellDirty)
{
var value = ((DataGridView) sender).Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
}
}
更新:
您的方法如下:
private void Amount(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == N)//YOUR CHECKBOX COLUM INDEX
{
var value = ((DataGridView) sender).Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
if (value != null)
{
if (Convert.ToBoolean(value) == true)
MessageBox.Show("Checked");
else
MessageBox.Show("Not Checked");
}
}
}
如何订阅复选框Checked
事件?它看起来未选中,可能不是空的。您没有用于该场景的MessageBox。顺便说一句,你没有使用_dt。显然,您需要使用类似CellValueChanged的DataGridView事件。在绑定数据后运行代码,而不是在grid Control的加载事件后运行代码您必须将事件CheckChanged
关联到每个复选框,然后当您单击它时,您可以选择“MessageBox.Show”(“Checked”);或MessageBox.Show(“Unchecked”)
;视情况而定。单元格[3]看起来像StudentLastName。我想对你来说。。。您只需将金额关联到事件CellValueChanged。这将得到解决。。。如果没有,那么您使用的单元格值是错误的。嗨,Daniloloko,我已经尝试了您的代码,它正在工作。但这不是我想要的,我添加了MessageBox.Show(“选中”)代码>在var值=..之后无论何时我选中或取消选中复选框,MessageBox.Show(“选中”)代码>在我单击更新
按钮之前不会出现。谢谢你。当我选中复选框,MessageBox.Show(“Checked”)代码>出现,而不是在我选中复选框时,直到我按下更新
按钮,消息框才会出现。谢谢,虽然这有点奇怪…试着在CellValueChanged的“if”上设置一个断点。。。看看有没有什么奇怪的事情发生。我已经把断点放在CellValueChanged
的if
上,情况仍然与我在前面的评论中提到的一样,先生,当我单击更新按钮时,IsCurrentCellDirty
为真问题是我没有声明dataGridView1.CurrentCellDirtyStateChanged+=new EventHandler(this.DirtyStateChanged)代码>在表单中加载
。不管怎样,它现在起作用了。非常感谢,先生!我把你的答案记在+1上并做了记号。