1

私はいくつかのコードをクリーンアップするために取り組んでいます。私が取り組んでいるのは、C# のコード ビハインドで作成されているグリッドビューです。作成されたバインドされたフィールドには、gridView に含まれる列のコレクションに追加されるかどうかを後で決定する表示可能なプロパティがあります。

gridView が構築されると、既定の列コレクションを表すプロパティが参照されますが、このプロパティ内では、バインドされた各フィールドの表示可能なプロパティが if ステートメントで評価され、表示されている場合はコレクションに追加されます。コードは次のようになります。

private GridView.BaseFieldCollection _defaultColumns;

private GridView.BaseFieldCollection DefaultColumns
{
    get
    {
        if (Col1.Visible)
        {
            _defaultColumns.Add(Col1);
        }
        if (Col2.Visible)
        {
            _defaultColumns.Add(Col2);
        }
        if (Col3.Visible)
        {
            _defaultColumns.Add(Col3);
        }
        if (Col4.Visible)
        {
            _defaultColumns.Add(Col4);
        }
        if (Col5.Visible)
        {
            _defaultColumns.Add(Col5);
        }
    }
}

問題は、評価するフィールドが 30 ほどあることと、if ステートメントが 30 ほどあることは、私には合わないということです。これにはもっとエレガントな解決策があるかもしれないと思っていました。ただし、すべての列をある種のコレクション オブジェクト (リスト、配列など) に追加し、それをループすることに頭を悩ませましたが、そうすると効率が低下する可能性があるように思われました。

このようなことをもう少しエレガントに行う方法について何か考えはありますか? 私は困惑しています...

ありがとう

4

2 に答える 2

1

しかし、そうすることは効率が悪いかもしれないようでした

このコードがボトルネックになるまで、これは無関係です。たとえば、データベース アクセスを少し追加すれば、このコードがボトルネックになることはありません。

var cols = new[] {Col1,Col2,Col3}; // etc
foreach(var col in cols)
{
  if(col.IsVisible)
    _defaultColumns.Add(col);
}

多分:

var cols = new[] {Col1,Col2,Col3}; // etc
_defaultColumns.AddRange(cols.Where(c => c.IsVisible));
于 2012-05-09T15:15:12.997 に答える
0

コンバーターを使用して、可視性プロパティにバインドされた列を表示する (または表示しない) ことができます

于 2012-05-09T15:23:09.273 に答える