2010-03-24 9 views
5

Szukałem godzin na coś bardzo prostego: wiążę datagrid WPF z datatable, aby zobaczyć kolumny w czasie projektowania. Nie mogę uzyskać żadnego z przykładów, który będzie dla mnie pracował.Jak powiązać tabelę w zestawie danych z datagridem WPF w C# i XAML

Oto kod C#, aby wypełnić DataTable InfoWork wewnątrz zestawu danych informacji:

info = new Info(); 
InfoTableAdapters.InfoWorkTableAdapter adapter = new InfoTableAdapters.InfoWorkTableAdapter(); 
adapter.Fill(info.InfoWork); 

Problemem jest nie ważne jak Oświadczam „info” lub „infoWork” Visual Studio/XAML nie może go znaleźć . Próbowałem:

<Window.Resources> 
    <ObjectDataProvider x:Key="infoWork" ObjectType="{x:Type local:info}" /> 
</Window.Resources> 

Próbowałem również ten przykład z wpf.codeplex, ale XAML nawet nie jak „lokalnym:” słowo kluczowe!

<Window.Resources> 
    <local:info x:Key="infoWork"/> 
</Window.Resources> 

Są naprawdę dwa główne pytania tutaj: 1) Jak mogę zadeklarować InfoWork tablicy w C#, dzięki czemu można go zobaczyć XAML? Próbowałem zadeklarować to Publiczne w klasie okna, że ​​XAML istnieje bez powodzenia. 2) Jak zadeklarować zasób windows w XAML, konkretnie datatable wewnątrz zestawu danych?

Z ciekawości, czy istnieje przyczyna, że ​​ItemsSource po prostu nie pojawia się jako właściwość ustawiona w oknie projektowania właściwości?

+0

Nie jest cudownym przykładem rozwiązania "większości" mojego problemu opublikowanego pod adresem: http://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx –

Odpowiedz

5

użyciu Microsoft DataGrid w następujący sposób działa dla mnie:

W XAML I obejmują DataGrid:

<WpfToolkit:DataGrid 
     Grid.Row="4" Grid.Column="0" 
     ItemsSource="{Binding Path=GridData, Mode=OneWay}" > 
    </WpfToolkit:DataGrid> 

moim zdaniem modelu I narazić DataView:

public DataView GridData 
    { 
    get 
    { 
     DataSet ds = new DataSet("MyDataSet"); 

     using (SqlConnection conn = new SqlConnection(ConnectionString)) 
     { 
      SqlCommand cmd = conn.CreateCommand(); 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = "SELECT * FROM HumanResources.Employee"; 

      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      da.Fill(ds); 
     } 

     return ds.Tables[0].DefaultView; 
    } 
    } 
+0

Działa to tak długo, jak ustawiasz kontekst danych do samego formularza , tzn. w konstruktorze: this.DataContext = this; – jrcs3

Powiązane problemy