2014-01-30 12 views
-2

3000 개가 넘는 필드가 포함 된 데이터 집합이 있습니다. 각 필드에 대한 클래스 및 속성을 수동으로 만들고 싶지 않습니다.동적 데이터를 바인딩하는 방법은 무엇입니까?

동적 개체 행을 만들고 목록에 바인딩 할 수있는 방법이 있습니까?

내가 시도한 모든 것이 실패했으며 바인딩을 사용하여 가능한지 확실하지 않습니다.

누군가 재미있는 질문을했지만 아직 해결책을 알지 못했습니다.

+0

사용자가 3000 열 너비의 정보 테이블을 표시 할 때 몇 가지 문제점을 예견 할 수 있습니다. 나는 그 중 몇백 개를 다루고 있으며 과도하다고 생각한다. – Servy

+0

좋아, 정확히 "186 개의 필드와 비슷한"약간의 약어 "였지만 186 개의 속성을 가진 클래스를 만들고 싶지 않습니다. – user2884737

+0

현재 데이터 형식은 무엇입니까? – Servy

답변

0

내 댓글을 사용하고 게시했다고하셨습니다.

지금 코드에 액세스 할 수 없지만 GridView에 대해 List를 사용하고 각 열에 대해 GridViewColumn으로 작성한 다음 [string]에 바인딩합니다. 또는 DataTable과 DataGrid를 사용할 수 있습니다.

0

동적으로 빌드 된 테이블에서 이와 동일한 문제가 발생했습니다. 몇 가지 연구를 통해 다양한 양의 필드를 처리 할 수있는 솔루션을 찾았습니다. 그것의 두 클래스로 구성되어 있습니다.

먼저 속성 클래스가 있습니다.이 속성을 표의 열로 봅니다.

public class Property 
{ 
    public string Name { get; private set; }//field name 
    public object Value { get; set; }//value 
    public Type DataType { get; private set; }//datatype if needed 
} 

그런 다음 본질적으로 속성 개체 모음입니다. 이것이 테이블의 한 줄인지보십시오.

public class Record : INotifyPropertyChanged 
{  
    private ObservableCollection<Property> _Properties; 
    public ObservableCollection<Property> Properties 
    { 
     get { return _Properties; } 
     set 
     { 
      _Properties = value; 
      OnPropertyChanged("Properties"); 
     } 
    } 

    public Record(List<Property> properties) 
    { 
     _Properties = new ObservableCollection<Property>(); 

     foreach (var property in properties) 
      _Properties.Add(property); 
    } 

    public Record(List<Property> properties) 
    { 
     _Properties = new ObservableCollection<Property>();    

     foreach (var property in properties) 
      _Properties.Add(property); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    //protected virtual void OnPropertyChanged(PropertyChangedEventArgs args) 
    //{ 
    // PropertyChangedEventHandler handler = this.PropertyChanged; 
    // if (handler != null) 
    // { 
    //  handler(this, args); 
    // } 
    //} 

}  

그런 다음 본질적으로 레코드 컬렉션이 될 필요가있는 컨트롤이나 항목을 바인딩 할 수 있습니다.

+0

동일한 ctor가 두 번 있습니다. 레코드 컬렉션을 컨트롤에 바인딩하는 방법의 예를 게시하십시오. 컨트롤을 작성하여 컨트롤을 작성하는 방법은 무엇입니까? – Paparazzi

+0

실제 결과 대신 각 행에 [컬렉션] 이름 목록을 제공합니다. user2884737

+0

방금 프레임 워크를주었습니다 ... 비즈니스 도메인에 따라 종류가 달라지며 데이터를 어떻게 얻는 지 알 수 있습니다. –

관련 문제