2012-01-26 5 views
1

저는 WPF에서 새로 왔으며 SQL 쿼리에서 WPF DataGrid로 데이터를 시각화하고 싶습니다. 나는 정확하게 데이터를 바인딩 방법으로 문제가 : 시도가 새로운 항목을 추가 할 때동적으로 데이터를 WPF DataGrid에 추가하는 방법

SqlCommand cmd = new SqlCommand(sql_dotaz, conn); 
InfoText.Text += ("Příkaz vytvořen a připojen" + "\n"); 

try 
{ 
    conn.Open(); 
    InfoText.Text += ("Připojení otevřeno" + "\n"); 

    SqlDataReader reader = cmd.ExecuteReader(); 

    int row_count = reader.FieldCount; 
    ArrayList propoj = new ArrayList(); 

    for (int i = 0; i < row_count; i++) 
    { 
     propoj.Add(reader.GetName(i)); 
     tabView.Columns.Add(new DataGridTextColumn 
      { 
       Header = reader.GetName(i), 
       Binding = new Binding(reader.GetName(i)) 
      }); 

     //Here is the problem!!! 
     tabView.Items.Add(new {propoj[i] = "Hello"}); 
    } 

문제는이 오류가 발생합니다. 명시 적으로 헤더 이름을 이와 같이 설정할 수는 없습니다 (Invitation = "Hello").

I also tried 

tabView.Columns.Add(new DataGridTextColumn 
    { 
     Header = reader.GetName(i), 
     Binding = new Binding(reader.GetName(i)) 
    }); 

string record = reader.GetName(i)); 
tabView.Items.Add(new {record = "Hello"}); 

그러나 헤더 이름에는 여전히 문제가 있습니다. DataGrid는 비어 있습니다.

아이디어가 있으면 알려 주시기 바랍니다. 감사합니다.

+0

안녕 Vilem을 SO에 오신 것을 환영합니다 및 WPF의 넓은 세계 . 몇 명의 사용자가 지적했듯이 DataGrid WPF 컨트롤에 직접 데이터를 추가 할 수는 있지만 오류가 발생하기 쉽지 않으며 데이터가 사용자에게 표시되도록하는 것이 좋습니다.나는 MVVM 디자인 패턴에 대한 예제를 찾고, ViewModel에'View '를'Data Binding'에 익숙하게 권고한다. – EtherDragon

답변

0

나는 해결책을 찾는다. 어쩌면 최선은 아니지만 일이 될 것입니다. 나는 데이터 집합 및 SQL 어댑터를

adapter.Fill(dSet); 
this.DataContext = dSet.Tables[0].DefaultView; 

및 XAML에서 만든 :

<DataGrid Height="Auto" Width="Auto" Name="tabView3" ItemsSource="{Binding}" /> 

그리고 지금 키우면 작동 잘 :-)

0

WPF 기술을 태그에 지정 했으므로 DataBinding으로 관리해야합니다.

예 링크 : 모든

Link1

Link 2

Link 3

1

첫째, 나는 익명의 유형이 바인딩에서 작동합니다 생각하지 않습니다.

// this should be renamed in something like columns or fieldCount... 
int row_count = reader.FieldCount; 

for (int i = 0; i < row_count; i++) 
{ 
    tabView.Columns.Add(new DataGridTextColumn 
     { 
      Header = reader.GetName(i), 
      Binding = new Binding("Items[i]") 
     }); 
} 

을 그리고 당신의 데이터 그리드 입력 : 당신은 쉽게 열을 생성 할 수 있습니다, 그와

// easiest case 
public class DatabaseObject 
{ 
    public List<string> Items = new List<string>(); 
} 

:

if(reader.HasRows) 
{ 
    do 
    { 
     DatabaseObject obj = new DatabaseObject(); 
     for (int i = 0; i < row_count; i++) 
     { 
      obj.Items.Add(reader.GetString(i)); 
     } 

     tabView.Items.Add(obj); 
    } 
    while(reader.NextResult()); 
} 
+0

조언을 해주셔서 감사합니다. 불행히도 저는 바인딩 할 수는 없지만 이것을 바인딩 할 수는 있습니다. 저의 미숙함 때문입니다. – VilemRousi

0

경우를 당신은 어떻게 든 그 래퍼 객체를 만들어야합니다 쉬운 길을 가고 싶어요 :

  1. 귀하의 데이터.
  2. 간단히 데이터 항목에서 datatable에 itemssource를 바인딩하십시오.

    <DataGrid ItemsSource="{Binding MyFilledDataTableProperty}" />

  3. 오른쪽 데이터 컨텍스트를 설정 (데이터 바인딩 및 MVVM에 대해 읽어).

관련 문제