1

データベースから取得したカスタム オブジェクト タイプのプロパティをループして、データを含む列のみを表示する必要があります。これは、オブジェクトのリストをデータグリッドに単純にバインドできないことを意味します。各オブジェクトをループして、列が空/nullであるかどうかを確認し、UIで表示するかどうかを判断したくありません。私が考えているのは、オブジェクトを送り返す前にビジネス層にあり、IEnumerable を表示する必要がある列だけで送り返します。したがって、これを行うためにLinq to Objectを使用することを考えていましたが、それが非常にきれいになるかどうかはわかりません。

大きなオブジェクト(30列程度)をチェックして、何を表示するかどうかを判断するために実行できる大量のIFステートメントなしで使用できるソリューションを知っている人はいますか。

Foreach (CustomerData customerdata in Customers) 
{ 
    if (!customerdata.address.Equals("")) 
       {
            dgvCustomerData.Column["Address"].visible = false;
         }
        //Continue checking other data columns...
}

UI とすべての IF でこれをすべて回避したいのですが... これで頭がおならをしています。誰か助けてもらえますか?

ありがとう

4

2 に答える 2

4

少し単純化するために次のことができます

Action<T,string> del = (value,name) => {
  if ( value.Equals("") ) {
    dgvCustomerData.Column[name].Visible = false;
  }
};
foreach ( var data in Customers ) {
  del(data.address,"Address");
  del(data.name, "Name");
  ...
}
于 2009-12-10T18:19:50.083 に答える
2

.NET Reflection Librariesを見てください。リフレクションを使用してオブジェクトのすべてのプロパティを取得し、それらをループして null かどうかを確認できます。次に、Key = プロパティ名、Value = true/false である KeyValuePair オブジェクトのコレクションを返すことができます。次に、キーと値のペアを使用して列の可視性を設定します...

于 2009-12-10T18:20:02.180 に答える