【问题标题】:Tracking row changes in the GridControl in DevExpress C#在 DevExpress C# 中跟踪 GridControl 中的行更改
【发布时间】:2013-04-08 02:46:46
【问题描述】:

我有一个问题困扰了我太久,但我似乎无法找到解决方案。

我们正在使用 DevExpress,并且我们有一个基于消息的架构,可以发送消息让系统的其他组件知道具体的变化。

我们的大部分应用程序都围绕着对绑定到 DataTable 对象的网格控件所做的更改。

我们需要发送的一个更重要的消息是当我们的网格控件上的行发生变化时。因此,如果行上的任何值发生变化,我们希望发送一条带有旧行值和新行值的消息,这样我们就有了新旧记录。我们希望在行失去焦点时发生这种情况,而不是在任何值立即更改之后发生。这样有人可以在发送消息之前更改整行。

我当前使用的解决方案不起作用,甚至不值得解释。

基本上,我需要为旧行和新行获取行值和列名的键/值列表。

我不确定如何在 DevExpress 中执行此操作。

【问题讨论】:

  • 我想知道你想跟踪什么级别的跟踪,因为网格控件是与数据表对象绑定的,可以构建消息调度程序来监控数据表对象的级别吗?您可以仅在数据表处于可接受值状态时跟踪旧/新值,或者即使用户在 devexpress 网格中处于编辑状态也需要跟踪?

标签: c# winforms devexpress devexpress-windows-ui


【解决方案1】:

一个想法是使用 DevExpress 网格提供的行索引。一旦你有了改变行的行索引,你就可以使用它做任何你想做的事情(转换成一个对象,保存存储在行中的数据,突出显示行等)使用这个行索引。这是您访问网格中选定行的索引的方式:

List<int> rowHandles = gridView.GetSelectedRows().ToList();    

【讨论】:

    【解决方案2】:

    您可以使用 DataTable 中的数据创建一个 BindingList。然后,您需要一个新类,每个对象代表 DataTable 中的一个 Row。然后将每个对象添加到 BindingList 并将其用作 DataSource。现在 BindingList.ListChanged 事件将触发网格中的每个更改值。它使您可以访问旧值和新值。也许你必须在你的类中实现 INotifyPropertyChanged 接口才能知道单元格是否发生了变化。

    【讨论】:

      【解决方案3】:

      我认为您应该使用 aspxgridview.rowupdating 事件,该事件将通过属性 e.OldValues 和 e.NewValues 为您提供旧值和新值。

      因此,您可以同时拥有记录的两个值。

      如需更详细的解释,我建议您访问以下链接:(希望对您有所帮助)

      http://www.devexpress.com/Support/Center/Question/Details/Q314701

      http://www.devexpress.com/Support/Center/Question/Details/Q261712

      http://www.devexpress.com/Support/Center/Question/Details/Q293847

      http://www.devexpress.com/Support/Center/Question/Details/Q350500

      http://www.devexpress.com/Support/Center/Question/Details/B202180

      【讨论】:

      • 正如问题所说,它是用于windows控制,而不是用于web。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 2016-06-15
      相关资源
      最近更新 更多