2009-12-10 2 views
1

Мне нужно пройти через свойства настраиваемого типа объекта, которые я возвращаю из базы данных, и показывать только столбцы, содержащие данные. Это означает, что я не могу просто привязать список объектов к datagrid. Я не хочу прокручивать каждый объект и видеть, пустой ли пул/null и определить в пользовательском интерфейсе его отображение. То, что я думаю, находится в моем бизнес-слое, прежде чем отправить объект обратно, я отправил бы IEnumerable обратно только те столбцы, которые должны быть видны. Таким образом, я думал об использовании Linq для Object для этого, но я не уверен, что это будет очень красиво.C# анонимный тип foreach looping

Кто-нибудь знает о решении, которое я мог бы использовать без тонны инструкций IF, которые я мог бы сделать, чтобы проверить большой объект (около 30 столбцов), чтобы определить, что должно отображаться или нет.

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

Я хочу, чтобы избежать всего этого в пользовательском интерфейсе и все МСФ ... У меня пердеть мозга на этом кто-нибудь может мне помочь?

Благодаря

ответ

1

Посмотрите на the .NET Reflection Libraries. Вы можете использовать отражение, чтобы получить все свойства объекта и прокручивать их, чтобы узнать, являются ли они нулевыми или нет. Затем вы можете вернуть коллекцию объектов KeyValuePair, где Key = имя свойства, и Value = true/false. Затем вы должны использовать keyvaluepairs, чтобы установить видимость столбца ...

+0

Это было скорее решение, о котором я думал, но вместо хэш-таблицы я думал больше о списке IEnumerable, который я мог бы просто привязать к datagrid. Я исследую это немного больше. – Bob

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"); 
    ... 
} 
+0

Я хотел бы вытащить это из слоя пользовательского интерфейса, чтобы пользовательский интерфейс не решал, что показывать или нет. Тем не менее, это был подход, который я думал делать в первую очередь. – Bob

Смежные вопросы