2010-02-10 74 views
0

我已经使用了这个“API”已经有很多年了(是的,在引用中,因为它可能是我使用过的最令人困惑的API碰到!)Synfusion WinForms网格控件:当单元格的内容发生变化时,我可以订阅哪些事件

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

有一个001事件发射了告诉你,当一个细胞发生了变化,但是当你查询相关GridStyleInfo.Text属性为单元,它总是告诉你什么WAS,而不是它是什么IS

这是公平的事件,如CurrentCellChangingCurrentCellValidating。我读过,你可以在这些事件中询问当前单元的'Renderer'它的价值。

对我来说看起来并不正确的是当我订阅CurrentCellValidated - 单元格文本是仍然是旧值。所以,CurrentCellValidated(我认为)意味着单元格的内容已经改变,验证已经开始,验证已经结束,验证已经成功,但... 什么是验证和它在哪里?

我知道我在StackOverflow上的下一个问题是什么 - 我给你一个提示:它包含单词'SyncFusion','Grid','Alternative'!

干杯,

史蒂夫

回答

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); 
     } 
2

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

添加更多信息 - 在进行任何验证之前,Grid会引发CurrentCellValidating。如果您查看GridStyleInfo,则会显示CellValueType(int,decimal,datetime等),Format和CultureInfo等属性。当你设置这些属性时,Grid会根据这些属性解析单元格值。在绑定控件的情况下 - GridDataBoundGrid或GridGroupingControl,它会从数据源的模式(如果可用)读取它。

因此CurrentCellValidating在任何验证之前触发,CurrentCellValidation在Grid解析并保存到GridStyleInfo.CellValue之前触发。

相关问题