Synfusion WinForms网格控件:当单元格';内容的变化

Synfusion WinForms网格控件:当单元格';内容的变化,winforms,grid,syncfusion,Winforms,Grid,Syncfusion,自从我使用这个“API”已经很多年了(是的,在引号中,因为它可能是我遇到过的最令人困惑的API!) 我的需要很简单我想订阅一个事件,告诉我某个单元格的内容已更改,以及新内容是什么。 触发的事件有一千零一个,告诉您单元格何时发生了更改,但当您为单元格查询关联的GridStyleInfo的.Text属性时,它总是告诉您它是什么,而不是它是什么 这对于像currentCellChangeing或CurrentCellValidating这样的事件来说已经足够公平了。我已经了解到,您可以在这些事件期间向

自从我使用这个“API”已经很多年了(是的,在引号中,因为它可能是我遇到过的最令人困惑的API!)

我的需要很简单我想订阅一个事件,告诉我某个单元格的内容已更改,以及新内容是什么。

触发的事件有一千零一个,告诉您单元格何时发生了更改,但当您为单元格查询关联的
GridStyleInfo
.Text
属性时,它总是告诉您它是什么,而不是它是什么

这对于像
currentCellChangeing
CurrentCellValidating
这样的事件来说已经足够公平了。我已经了解到,您可以在这些事件期间向当前单元格的“
渲染器”
”询问它的值

在我看来不合适的是,当我订阅
CurrentCellValidated
时,单元格文本仍然是旧值。因此,
CurrentCellValidated
(我假设)意味着单元格的内容已经更改,验证已经开始,验证已经结束,验证已经成功,但是什么已经过验证,它在哪里?

我知道我下一个关于StackOverflow的问题是什么-我会给你一个提示:它包含“SyncFusion”、“Grid”、“Alternative”几个词

干杯


Steve

在将更改的值移动到基础样式对象之前引发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); } 私有void Form1\u加载(对象发送方、事件参数e) { this.gridControl1.CurrentCellValidated+=新事件处理程序(gridControl1\u CurrentCellValidated); this.gridControl1.CurrentCellAcceptedChanges+=新的CancelEventHandler(gridControl1\u CurrentCellAcceptedChanges); } void gridControl1\u CurrentCellAcceptedChanges(对象发送方,CancelEventArgs e) { GridCurrentCell cc=gridControl1.CurrentCell; WriteLine(“gridControl1_CurrentCellAcceptedChanges单元格({0},{1})更改为:{2}”、cc.RowIndex、cc.ColIndex、gridControl1[cc.RowIndex、cc.ColIndex].CellValue); } void gridControl1\u CurrentCellValidated(对象发送方,事件参数e) { GridCurrentCell cc=gridControl1.CurrentCell; WriteLine(“gridControl1\u CurrentCellValidated单元格({0},{1})更改为:{2}”、cc.RowIndex、cc.ColIndex、cc.Renderer.ControlText); }
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); } 私有void Form1\u加载(对象发送方、事件参数e) { this.gridControl1.CurrentCellValidated+=新事件处理程序(gridControl1\u CurrentCellValidated); this.gridControl1.CurrentCellAcceptedChanges+=新的CancelEventHandler(gridControl1\u CurrentCellAcceptedChanges); } void gridControl1\u CurrentCellAcceptedChanges(对象发送方,CancelEventArgs e) { GridCurrentCell cc=gridControl1.CurrentCell; WriteLine(“gridControl1_CurrentCellAcceptedChanges单元格({0},{1})更改为:{2}”、cc.RowIndex、cc.ColIndex、gridControl1[cc.RowIndex、cc.ColIndex].CellValue); } void gridControl1\u CurrentCellValidated(对象发送方,事件参数e) { GridCurrentCell cc=gridControl1.CurrentCell; WriteLine(“gridControl1\u CurrentCellValidated单元格({0},{1})更改为:{2}”、cc.RowIndex、cc.ColIndex、cc.Renderer.ControlText); }
正如Clay所说,CurrentCellAcceptedChanges事件将是在将值存储到GridStyleInfo后获取该值的正确位置

添加更多信息-网格会在执行任何验证之前引发CurrentCellValidating。如果您查看GridStyleInfo,会发现一些属性,如CellValueType(int、decimal、datetime等)、Format和CultureInfo。设置这些属性时,Grid将基于这些属性解析CellValue。对于绑定控件-GridDataBoundGrid或GridGroupingControl,它将从数据源的模式(如果可用)中读取它


因此,CurrentCellValidation在任何验证之前启动,CurrentCellValidation在Grid进行解析之后,在保存到GridStyleInfo.CellValue之前启动。

正如Clay所说,CurrentCellAcceptedChanges事件将是在值存储到GridStyleInfo之后获取值的正确位置

添加更多信息-网格会在执行任何验证之前引发CurrentCellValidating。如果您查看GridStyleInfo,会发现一些属性,如CellValueType(int、decimal、datetime等)、Format和CultureInfo。设置这些属性时,Grid将基于这些属性解析CellValue。对于绑定控件-GridDataBoundGrid或GridGroupingControl,它将从数据源的模式(如果可用)中读取它

因此,CurrentCellValidation在任何验证之前被激发,CurrentCellValidation在Grid进行解析之后以及保存到GridStyleInfo.CellValue之前被激发