自从我使用这个“API”已经很多年了(是的,在引号中,因为它可能是我遇到过的最令人困惑的API!)
我的需求非常简单。 我想订阅一个事件,告诉我单元格的内容已经更改,新内容是什么。
有一个千和一个事件会在单元格发生更改时告诉您,但是当您查询单元格的关联.Text
的{{1}}属性时,它总是告诉你什么 WAS 而不是是。
这对于GridStyleInfo
或CurrentCellChanging
等事件来说已经足够了。我已经读过你可以在这些事件中询问当前单元格的'CurrentCellValidating
'是否有值。
对我来说似乎不对的是当我订阅Renderer
时 - 单元格文本仍然是旧值。所以,CurrentCellValidated
(我假设)意味着单元格的内容已经更改,验证已经开始,验证已经结束,验证已成功,但是...... 已验证的内容以及是吗?
我知道我在StackOverflow上的下一个问题是什么 - 我会给你一个提示:它包含'SyncFusion','Grid','Alternative'!!
干杯,
史蒂夫
答案 0 :(得分:2)
在将更改的值移动到基础样式对象之前引发CurrentCellValidated事件。如果要在将更改的值移动到基础样式对象后捕获更改,请尝试使用CurrentCellAcceptedChanged事件。
以下是一个展示如何使用这两个事件的示例。
private void Form1_Load(object sender, EventArgs e) { this.gridControl1.CurrentCellValidated += new EventHandler(gridControl1_CurrentCellValidated); this.gridControl1.CurrentCellAcceptedChanges += new CancelEventHandler(gridControl1_CurrentCellAcceptedChanges); } void gridControl1_CurrentCellAcceptedChanges(object sender, CancelEventArgs e) { GridCurrentCell cc = gridControl1.CurrentCell; Console.WriteLine("gridControl1_CurrentCellAcceptedChanges cell ({0},{1}) changed to: {2}", cc.RowIndex, cc.ColIndex, gridControl1[cc.RowIndex, cc.ColIndex].CellValue); } void gridControl1_CurrentCellValidated(object sender, EventArgs e) { GridCurrentCell cc = gridControl1.CurrentCell; Console.WriteLine("gridControl1_CurrentCellValidated cell ({0},{1}) changed to: {2}", cc.RowIndex, cc.ColIndex, cc.Renderer.ControlText); }
答案 1 :(得分:2)
正如Clay所说,在将值存储到GridStyleInfo之后,CurrentCellAcceptedChanges事件将是获取值的正确位置。
添加更多信息 - Grid在进行任何验证之前会引发CurrentCellValidating。如果你看一下GridStyleInfo,就会有像CellValueType(int,decimal,datetime等),Format和CultureInfo这样的属性。设置这些属性时,Grid将根据这些属性解析单元格值。如果绑定控件 - GridDataBoundGrid或GridGroupingControl,它将从数据源的模式(如果可用)读取它。
因此,在任何验证之前触发CurrentCellValidating,在Grid解析之后以及在保存到GridStyleInfo.CellValue之前触发CurrentCellValidation。