2012-12-19 4 views
5

Ich habe eine Tabelle aus einer Datenbank angezeigt. Ich mag den horizontalen Kopf Säulen- anzuzeigen> VerticallyEine horizontale Tabelle vertikal in einem Datagrid-WPF anzeigen

Meine Tabellenstruktur ist

Server|Role|Status|Date 

aber ich mag als

Server 
    Role 
    Status 
    Date 

ich den Datensatz zu drehen versucht, anzuzeigen, und versuchte es zu bauen. Anfangs war der Build erfolgreich, aber ich kann keine Daten auf meinem Datagrid sehen. bitte helfen, gibt es eine andere Möglichkeit, dieses Problem anzugehen?

hier ist mein Code-Schnipsel

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); 
    } 
} 

Dank

+0

Wenn ich nicht falsch liege, müssen Sie ein leeres DataGrid sehen, richtig? weil ich sehe, dass keine Daten abgerufen werden und 'da.fill' Methode nicht aufgerufen wird. Wenn Sie das korrigieren, ein weiteres Problem, das ich dort sehe, ist, nachdem Sie alle Transponierungslogiken gemacht haben, füttern Sie wieder die ursprüngliche Datentabelle zu' dataGrid1' ändere es 'ds.Tables [1]' anstelle von 'ds.Tables [0]' – dotNETbeginner

+1

Ja, du hast Recht. Ich sehe ein leeres Datagrid. aber wenn ich versuche, da.Fill (ds) hinzuzufügen; es gibt Fehler während des Bauens. Lassen Sie mich versuchen Sie die Option, die Sie im letzten Satz gegeben haben und lassen Sie wissen – user1221765

+0

welchen Fehler erhalten Sie genau? und wenn Sie die 'Fill' nicht tun, gibt es keine Möglichkeit, dass Sie eine Ausgabe bekommen ... – dotNETbeginner

Antwort

11

Zuerst versuchte ich meine Tabelle in meiner DB mit Pivot-Tabelle zu drehen, konnte aber nicht gelingen ..

dann fand ich Legen Sie die Datagrid.layouttransform und eine Datagrid.Cellstyle zum Drehen der Ansicht der Tabelle.

  <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> 

und stellen Sie die Höhe und Breite der Spalten entsprechend ein und es funktioniert gut. Danke!

+2

Tolle Arbeit. Ich habe dies an mein Datagrid angepasst. – KyloRen

+0

toll es hat dir geholfen! – user1221765

Verwandte Themen