Syncfusion WinForms网格控件:当单元格的内容发生变化时,我可以订阅哪些事件

时间:2010-02-10 17:05:20

标签: winforms grid syncfusion

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

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

有一个千和一个事件会在单元格发生更改时告诉您,但是当您查询单元格的关联.Text的{​​{1}}属性时,它总是告诉你什么 WAS 而不是

这对于GridStyleInfoCurrentCellChanging等事件来说已经足够了。我已经读过你可以在这些事件中询问当前单元格的'CurrentCellValidating'是否有值。

对我来说似乎不对的是当我订阅Renderer时 - 单元格文本仍然是旧值。所以,CurrentCellValidated (我假设)意味着单元格的内容已经更改,验证已经开始,验证已经结束,验证已成功,但是...... 已验证的内容以及是吗?

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

干杯,

史蒂夫

2 个答案:

答案 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。