选中datagridview中的复选框时显示消息框

时间:2014-04-15 12:57:25

标签: c# winforms datagridview

我有一个这样的数据库(查看DataGridView):

enter image description here

正如您在上图所示,DataGridView中有复选框。我想在选中复选框时,消息框会显示一些文字。

我怎样才能做到这一点?

我试过的是每当我选中复选框时,消息框都不会出现,并且在我运行程序时会检查2014年1月的第一行列,但是当我取消选中并再次检查时,消息框不会出现。

以下是我正在使用的代码:

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);

我通过手动通过数据库添加了复选框,这是我的访问数据库,如下所示:

enter image description here

您的回答非常感谢!谢谢!

更新:

以下代码是我修改过的Daniloloko爵士的代码,我使用List<int>,因为我要检查的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");
                        }
                    }
                }
            }
        }

但是从上面的代码中,每当我检查或取消选中MessageBox.Show("Not Checked");(运行时)中的CheckBox时,MessageBox.Show("Checked");DataGridView都没有显示。我想要的是在我选中或取消选中CheckBox后立即显示MessageBox,而不是在我点击EnterUpdate按钮时显示MessageBox (取决于我的复选框未选中或已选中)

非常感谢!

很抱歉让你们感到困惑。

解决:

我忘了在dataGridView1.CurrentCellDirtyStateChanged += new EventHandler(this.DirtyStateChanged);中声明Form_Load

非常感谢你,很抱歉让你们感到困惑。

问候。

1 个答案:

答案 0 :(得分:1)

如果您将金额与名为 CellValueChanged 的事件相关联,则每次加载GRID时它都会上升。解决!

但是,如果您需要检测加载网格后检查的行,则需要使用名为CurrentCellDirtyStateChanged的dataGridView1事件:

编辑:dataGridView1.CurrentCellDirtyStateChanged += new EventHandler(this.DirtyStateChanged); // Declared and put this on the Form_Load

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");
            }
        }
    }