2009-12-10 8 views
1

데이터베이스에서 돌아오고 데이터가 포함 된 열만 표시하는 사용자 지정 개체 형식의 속성을 반복해야합니다. 즉, 개체 목록을 DataGrid에 간단하게 바인딩 할 수는 없습니다. 각 개체를 순환하여 열이 비어 있는지 확인하고 표시 할 UI를 결정할 필요가 없습니다. 개체를 다시 보내기 전에 비즈니스 계층에 무엇이 있다고 생각합니까? 다시 볼 수 있어야하는 열만있는 IEnumerable을 보냅니다. 따라서 Linq를 사용하여 Object를 사용하여이 작업을 수행 할 생각이었습니다.하지만이 작업이 매우 예쁘다고 확신하지 못합니다.C# 익명 형식 foreach 루프

큰 개체 (30 열 정도)를 검사하여 무엇을 표시해야하는지 결정할 수있는 IF 문을 사용하지 않고도 사용할 수있는 솔루션을 아는 사람이 있습니까?

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

내가 모든 IF를 UI에서이 모든 것을 피하고자하고 ... 나는이 일에 뇌 방귀가 있어요 사람이 나를 도울 수 있습니까?

감사

답변

1

을 단순화하기 위해 다음을 수행 할 수있다. 리플렉션을 사용하여 객체의 모든 속성을 확인하고 루프를 통해 반복하여 null인지 아닌지 확인할 수 있습니다. 그런 다음 KeyValuePair 객체의 컬렉션을 반환 할 수 있습니다 (Key = 속성 이름, Value = true/false). 그런 다음 keyvalue 쌍을 사용하여 열 가시성을 설정합니다.

+0

이것은 내가 생각하고있는 솔루션 중 더 많은 것이었지만 해시 테이블 대신 IEnumerable 목록을 더 생각하여 간단히 데이터 그램에 바인딩 할 수있었습니다. 나는 이것을 조금 더 연구 할 것이다. – Bob

4

당신은 the .NET Reflection Libraries를 살펴 보자 그것을 조금

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

UI를 표시하거나 숨길 UI를 결정하고 싶습니다. 그러나, 이것은 내가 처음에하려고 생각했던 접근이었다. – Bob