Вопрос

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

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

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

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

Спасибо

Это было полезно?

Решение

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

Другие советы

Вы можете сделать следующее, чтобы немного упростить его

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");
  ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top