2012-12-19 9 views
5

Mam tabelę wyświetlaną z bazy danych. Chciałbym, aby wyświetlić poziomą Column- header> PionowoWyświetl tabelę poziomą pionowo w Datagrid-WPF

Moja tabela Struktura jest

Server|Role|Status|Date 

ale chciałbym wyświetlać jako

Server 
    Role 
    Status 
    Date 

Próbowałem odwrócić zestawu danych, i próbowałem to zbudować. Początkowo kompilacja się powiodła, ale nie mogę wyświetlić żadnych danych na moim komputerze datagrid. uprzejma pomoc, czy istnieje inny sposób podejścia do tego problemu?

tutaj jest mój urywek kodu

SqlConnection con; 
SqlDataAdapter da = null; 
DataSet ds = null; 

private void Page_Loaded(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     da = new SqlDataAdapter("Select * from [ServerDB_Test].[dbo].[ServerStatus] ", con); 
     ds = new DataSet(); 
     foreach (DataTable dt in my_DataSet.Tables) 
     { 
      DataTable table = new DataTable(); 

      for (int i = 0; i <= dt.Rows.Count; i++) 
      { 
       table.Columns.Add(Convert.ToString(i)); } 
       DataRow r; 
       for (int k = 0; k < dt.Columns.Count; k++) 
       { 
        r = table.NewRow(); 
        r[0] = dt.Columns[k].ToString(); 
        for (int j = 1; j <= dt.Rows.Count; j++) 
        { 
         r[j] = dt.Rows[j - 1][k]; 
        } 
        table.Rows.Add(r); 
       } 
      ds.Tables.Add(table); 
     } 
     da.Fill(ds); 
     dataGrid1.ItemsSource = ds.Tables[1].DefaultView; 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex.Message); 
    } 
} 

Dzięki

+0

Jeśli się nie mylę, musisz zobaczyć pusty plik danych, prawda? ponieważ widzę, że nie pobrano żadnych danych, a metoda 'da.fill' nie jest wywoływana. Jeśli to poprawisz, jeszcze jeden problem, jaki widzę, po wykonaniu wszystkich logiki transpozycji, karmisz ponownie pierwotną datatable do' dataGrid1' zmień go 'ds.Tabela [1]' zamiast 'ds.Tables [0]' – dotNETbeginner

+1

Tak, proszę bardzo. Widzę pusty datagrid. , ale gdy próbuję dodać da.Fill (ds); jest błąd podczas buidling. Pozwól mi wypróbować opcję, którą podałeś w ostatnim zdaniu, i dasz znać, – user1221765

+0

jaki błąd otrzymujesz dokładnie? a jeśli nie zrobisz "Wypełnienia", nie ma sposobu, aby uzyskać pewne wyjście ... – dotNETbeginner

Odpowiedz

11

Początkowo próbowałem obracanie moim stole w moim DB za pomocą tabeli przestawnej, ale nie może się udać ..

potem znalazłem się ustaw plik datagrid.layouttransform i datagrid.Cellstyle, aby obrócić widok tabeli.

  <DataGrid.LayoutTransform> 
      <TransformGroup> 
       <RotateTransform Angle="90"/> 
        <MatrixTransform Matrix="-1,0,0,1,0,0"/> 
       </TransformGroup> 
      </DataGrid.LayoutTransform> 
      <DataGrid.ColumnHeaderStyle> 
       <Style TargetType="{x:Type DataGridColumnHeader}" BasedOn="{StaticResource {x:Type DataGridColumnHeader}}"> 
        <Setter Property="LayoutTransform"> 
         <Setter.Value> 
          <TransformGroup> 
           <RotateTransform Angle="-90"/> 
           <ScaleTransform ScaleX="1" ScaleY="-1" /> 
          </TransformGroup> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </DataGrid.ColumnHeaderStyle> 
      <DataGrid.CellStyle> 
       <Style TargetType="DataGridCell"> 
        <Setter Property="LayoutTransform"> 
         <Setter.Value> 
          <TransformGroup> 
           <RotateTransform Angle="-90"/> 
           <ScaleTransform ScaleX="1" ScaleY="-1" /> 
          </TransformGroup> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </DataGrid.CellStyle> 

i odpowiednio ustawić wysokość i szerokość kolumn i działa poprawnie. Dzięki!

+2

Świetna robota. Dostosowałem to do mojego Datagrida. – KyloRen

+0

Wspaniale to pomogło! – user1221765