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上并做了记号。