如何用c#语句写dataGridView1的 CellValueChanged 事件没有被触发
如何用c#语句写dataGridView1的CellValueChanged事件没有被触发,也就是如何证明dataGridView1中的值没有改变...
如何用c#语句写dataGridView1的 CellValueChanged 事件没有被触发,也就是如何证明dataGridView1中的值没有改变
展开
2个回答
展开全部
方法临时想了一个,比如外部声明一个int i=0;
然后在dataGridView1的 CellValueChanged 事件随便写个什么,想什么“i++”之类的。
然后判断“i”是不是还是为0就行了。
可能有更好的办法,不过暂时没想到。
然后在dataGridView1的 CellValueChanged 事件随便写个什么,想什么“i++”之类的。
然后判断“i”是不是还是为0就行了。
可能有更好的办法,不过暂时没想到。
追问
哥们我觉得你这个方法非常妙,但是为什么就是不对呢,好像dataGridView中值改变时触发的事件不是CellValueChanged,但触发的是哪个事件知道吗
追答
这个我也没试过,不是CellValueChanged的话我记得还一个CellValueChanging,CellValueClick什么的,说实话用的少。
展开全部
获取焦点时取单元格值,在失去焦点时判断是否一致
string tempCellValue = null;
ArrayList alChangeCells=new ArrayList();
/// <summary>
/// 获取焦点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgvItems_CellLeave(object sender, DataGridViewCellEventArgs e)
{
tempCellValue = fmtString(dgvItems.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
}
/// <summary>
/// 失去焦点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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());
}
}
/// <summary>
/// 格式化值去除Null
/// </summary>
/// <param name="val">Cell Value</param>
/// <returns></returns>
private string fmtString(object val)
{
return val == null ? "" : val.ToString();
}
需要判断时,alChangeCells.Count>0,则有单元格被改变.
循环输出alChangeCells的项,就是 "行索引-列索引"
用split('-')分割就可以得到行列定位.
-------
如果你要做的更细一点,就要用hashtable记录每个曾经动过的单元格的初始值,而不是用一个string,这样每次比较的对象就是原始值,那么在单元格改了一次又改回来时,可以从改变列表里把这个项给清除掉.
string tempCellValue = null;
ArrayList alChangeCells=new ArrayList();
/// <summary>
/// 获取焦点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void dgvItems_CellLeave(object sender, DataGridViewCellEventArgs e)
{
tempCellValue = fmtString(dgvItems.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
}
/// <summary>
/// 失去焦点
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
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());
}
}
/// <summary>
/// 格式化值去除Null
/// </summary>
/// <param name="val">Cell Value</param>
/// <returns></returns>
private string fmtString(object val)
{
return val == null ? "" : val.ToString();
}
需要判断时,alChangeCells.Count>0,则有单元格被改变.
循环输出alChangeCells的项,就是 "行索引-列索引"
用split('-')分割就可以得到行列定位.
-------
如果你要做的更细一点,就要用hashtable记录每个曾经动过的单元格的初始值,而不是用一个string,这样每次比较的对象就是原始值,那么在单元格改了一次又改回来时,可以从改变列表里把这个项给清除掉.
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询