如何用c#语句写dataGridView1的 CellValueChanged 事件没有被触发

2025-03-04 11:49:23
推荐回答(2个)
回答1:

方法临时想了一个,比如外部声明一个int i=0;
然后在dataGridView1的 CellValueChanged 事件随便写个什么,想什么“i++”之类的。
然后判断“i”是不是还是为0就行了。

可能有更好的办法,不过暂时没想到。

回答2:

获取焦点时取单元格值,在失去焦点时判断是否一致
string tempCellValue = null;
ArrayList alChangeCells=new ArrayList();
///


/// 获取焦点
///

///
///
private void dgvItems_CellLeave(object sender, DataGridViewCellEventArgs e)
{
tempCellValue = fmtString(dgvItems.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
}

///
/// 失去焦点
///

///
///
private void dgvItems_CellValidated(object sender, DataGridViewCellEventArgs e)
{
string curValue = fmtString(dgvItems.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
//if (tempCellValue == curValue)
//{
// MessageBox.Show("值没变");
//}
//else
//{
// MessageBox.Show("值变了");
//}
if (tempCellValue != curValue && !alChangeCells.Contains(e.RowIndex.ToString() + "-" + e.ColumnIndex.ToString()))
{
alChangeCells.Add(e.RowIndex.ToString() + "-" + e.ColumnIndex.ToString());
}
}

///
/// 格式化值去除Null
///

/// Cell Value
///
private string fmtString(object val)
{
return val == null ? "" : val.ToString();
}
需要判断时,alChangeCells.Count>0,则有单元格被改变.
循环输出alChangeCells的项,就是 "行索引-列索引"
用split('-')分割就可以得到行列定位.
-------
如果你要做的更细一点,就要用hashtable记录每个曾经动过的单元格的初始值,而不是用一个string,这样每次比较的对象就是原始值,那么在单元格改了一次又改回来时,可以从改变列表里把这个项给清除掉.