1

DevExpress XtraGrid (WinForms)に日付範囲のコレクション (各日付範囲はPeriodオブジェクトで表されます) をリストしています。

期間を 2 つに分割するメソッド (分割日はユーザーが入力します) では、コードは次のようになります。

  1. フォーカスされた行の期間参照を取得します。((期間)GridViewPeriods.GetRow(selectedRows[0]);)
  2. 選択した期間を複製します。
  3. 新しく複製された期間の参照を取得します。

仕事が終わったら、新しく複製された期間に焦点を当てたいと思います。この時点で、ピリオドのリファレンスは 2 つしかありません。

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

次に、次のように新しく作成された期間にフォーカスを設定します。

GridViewPeriods.FocusedRowHandle = GetDataRowIndex(tailingPeriod);

それを行うためのより短いまたはよりスマートな方法はありますか?

4

1 に答える 1

0

あなたが探しているものを手に入れるためにたくさんのことを経験しなければならないようですが、あなたはそれを最善の方法でやっているようですDevExpressはあなたが持っているのと同じ解決策を持っています

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

rowindexがデータソースの順序に関連している可能性があると思いましたが、照合には表示されません

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

単一のセルに何らかの一意の識別情報を 表示している場合、一意の識別情報を表示していない場合は、LocateByValueを使用できる可能性があります。その列はいつでも非表示にできます。

于 2012-07-05T20:53:48.900 に答える