【问题标题】:DevExpress XtraGrid : What is the proper way to obtain the RowHandle from an ObjectDevExpress XtraGrid:从对象获取 RowHandle 的正确方法是什么
【发布时间】:2012-07-05 19:57:39
【问题描述】:

我在 DevExpress XtraGrid (WinForms) 中列出日期范围的集合(每个日期范围由 Period 对象表示)。

在将 Period 一分为二的方法中(分割日期由用户输入),代码执行以下操作:

  1. 获取焦点行的周期引用。 ((Period)GridViewPeriods.GetRow(selectedRows[0]);)
  2. 克隆选定的时间段。
  3. 获取有关新克隆的 Period 的引用。

工作完成后,我想把重点放在新克隆的 Period 上。此时,我只有两个 Period 引用。

我在 XtraGrid 中没有找到任何可以根据行的值定位行的方法(例如通过传递对象返回 RowHandle)。

我最终编写了这个辅助方法:

    public int GetDataRowIndex(RatePeriod period)
    {
        int foundIndex = 0;

        for (int i = 0; i < GridViewRatePeriods.DataRowCount; i++)
        {
            if ((RatePeriod)GridViewRatePeriods.GetRow(i) == period)
            {
                foundIndex = i;
                break;
            }
        }
        return foundIndex;
    }

然后我将焦点设置在新创建的 Period 上:

GridViewPeriods.FocusedRowHandle = GetDataRowIndex(tailingPeriod);

有没有更短或更聪明的方法来做到这一点?

【问题讨论】:

  • 您的数据中没有显示在网格中的唯一标识符吗?
  • 如果您添加了一个具有唯一标识信息并使用 LocateByValue 的列,该怎么办(请参阅我编辑的答案)
  • 感谢您的建议。我也想避免这样做。我不喜欢为了能够检索特定行而将这种数据放在 UI 中。对我来说似乎是“黑客行为”。
  • 我们能看到一些关于如何添加克隆行的代码吗? AddNewRow 应该将焦点设置到新记录。

标签: c# winforms devexpress


【解决方案1】:

看起来你正在以最好的方式做这件事,虽然你似乎必须经历很多事情才能得到你正在寻找的东西 Dev Express 与你有相同的解决方案

http://www.devexpress.com/Support/Center/p/A1488.aspx

我认为也许 rowindex 可能与您的数据源的顺序相关,但似乎没有任何排序规则

http://www.devexpress.com/Support/Center/p/A1488.aspx

如果您在单个单元格中显示任何独特的识别信息,您可以使用 LocateByValue 如果您没有显示唯一的识别信息,您可以随时隐藏该列

【讨论】:

  • 感谢您的意见。引用的帖子已经很老了,但是,正如我看到它最近更新的那样,我认为没有更好的方法来完成它。
  • @SteveHémond 您是否显示任何独特的识别信息?你也许可以使用documentation.devexpress.com/#WindowsForms/…
  • 不,我不是。我发帖的原因也是因为我想避免做隐藏的列值调整。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 2010-10-03
  • 2011-04-26
  • 2015-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多