我有一个这样的数据库(查看DataGridView
):
正如您在上图所示,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);
我通过手动通过数据库添加了复选框,这是我的访问数据库,如下所示:
您的回答非常感谢!谢谢!
更新:
以下代码是我修改过的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
,而不是在我点击Enter
或Update
按钮时显示MessageBox
(取决于我的复选框未选中或已选中)
非常感谢!
很抱歉让你们感到困惑。
解决:
我忘了在dataGridView1.CurrentCellDirtyStateChanged += new EventHandler(this.DirtyStateChanged);
中声明Form_Load
。
非常感谢你,很抱歉让你们感到困惑。
问候。
答案 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");
}
}
}