2017-07-19 4 views
1

Ich lade eine DataTable aus einer Datenbank und möchte sie nicht so haben, wie sie aussieht. Deshalb habe ich beschlossen, eine neue DataTable zu erstellen und sie mit meinen empfangenen Daten zu füllen. Leider werden die Daten im DataGrid nicht vollständig angezeigt. Genauer gesagt wird nur die erste Spalte angezeigt, aber nicht alle anderen. Beim Debugging konnte ich sicherstellen, dass die DataTable korrekt gefüllt ist.Datagrid zeigt keine vollständigen Daten der Datentabelle an

Hat jemand von euch eine Idee, was ich falsch mache?

Modell:

internal DataTable getValueTable(ObservableCollection<CheckableMenuitem> listSelectableValues) 
{ 
    DataTable TableToReturn = new DataTable(); 

    string LaborValueColumnCaption = Properties.Resources.LabValueColumnCaption; 
    TableToReturn.Columns.Add(LaborValueColumnCaption); 

    List<string> selectedValueNames = new List<string>(); 
    foreach (CheckableMenuitem item in listSelectableValues.Where(x => x.IsChecked == true)) 
    { 
     selectedValueNames.Add(item.Caption); 
    } 

    string selectionFormular = "Wertname in ('" + string.Join("', '", selectedValueNames) + "')"; 
    DataRow[] selectionRows = fullValueTable.Select(selectionFormular); 

    HashSet<DateTime> ListOfDays = new HashSet<DateTime>(); 

    foreach (DataRow item in selectionRows) 
    { 
     DateTime? Tmp = Functions.ParseNullableDate(item["Messdatum"].ToString()); 
     if (Tmp != null) 
     { 
      ListOfDays.Add(((DateTime)Tmp).Date); 
     } 
    } 

    string DateFormatString = "dd.MM.yyyy"; 

    foreach (DateTime date in ListOfDays) 
    { 
     TableToReturn.Columns.Add(date.ToString(DateFormatString)); 
    } 


    foreach (var valueName in selectedValueNames) 
    { 
     string singleSelectionFormular = "Wertname ='" + valueName + "'"; 
     List<DataRow> singleSelectionRows = fullValueTable.Select(singleSelectionFormular).ToList(); 

     if (singleSelectionRows.Count() == 1) 
     { 
      DateTime? ValueDate = Functions.ParseNullableDate(singleSelectionRows[0]["Messdatum"].ToString()); 

      if (ValueDate != null) 
      { 

      } 

      DataRow newRow = TableToReturn.NewRow(); 

      //erste Spalte 
      newRow[LaborValueColumnCaption] = valueName; 

      string spalte = ((DateTime)ValueDate).ToString(DateFormatString); 

      newRow[spalte] = singleSelectionRows[0]["MESSWERT_ALPHA"].ToString(); 
      //newRow[((DateTime)ValueDate).ToString(DateFormatString)] = singleSelectionRows[0]["MESSWERT_ALPHA"].ToString(); 

      TableToReturn.Rows.Add(newRow); 
     } 

     if (singleSelectionRows.Count() > 1) 
     { 
      List<DataRow> Rows = new List<DataRow>() { TableToReturn.NewRow() }; 
      Rows[0][LaborValueColumnCaption] = valueName; 

      HashSet<DateTime> usedDates = new HashSet<DateTime>(); 

      foreach (var item in singleSelectionRows) 
      { 
       DateTime? ValueDate = Functions.ParseNullableDate(singleSelectionRows[0]["Messdatum"].ToString()); 

       if (ValueDate != null) 
       { 
        DateTime Date = ((DateTime)ValueDate).Date; 

        if (usedDates.Add(Date)) 
        { 
         string name = "Wertname ='" + valueName + "' and Messdatum > " + Date + " and Messdatum < " + Date.AddDays(1); 
         DataRow[] test2 = fullValueTable.Select(singleSelectionFormular); 
         //Rows[0][((DateTime)ValueDate).ToString(DateFormatString)] = singleSelectionRows[0]["MESSWERT_ALPHA"].ToString(); 
        } 
       } 
      } 

      foreach (DataRow newRow in Rows) 
      { 
       TableToReturn.Rows.Add(newRow); 
      } 
     } 
    } 

    return TableToReturn; 
} 

Ansichtsmodell:

public DataTable ValueTable 
{ 
    get 
    { 
     return model.getValueTable(ListSelectableValues); 
    } 
} 

Ausblick:

<DataGrid DockPanel.Dock="Top" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" AutoGenerateColumns="True" ItemsSource="{Binding Path=ValueTable}"/> 

edit: enter image description here

+0

Wie viele Spalten enthält die zurückgegebene Datatable hat eigentlich? Welche Spalte siehst du? Was passiert, wenn Sie an die DefaultView-Eigenschaft davon binden? ItemsSource = "{Binding Path = ValueTable.DefaultView}? – mm8

+0

Ich weiß nicht, wie viele Spalten es sein wird, es könnte immer anders sein. Aber ich habe Beweis dafür, und alle Spalten werden korrekt angezeigt, nur die Werte fehlen. I wird meinen Beitrag aktualisieren und dir einen Screenshot geben Binding der DefaultView hat mein Problem nicht gelöst Ich habe sogar versucht das DataView (.AsDataView()) in meinem ViewModel zurück zu geben –

+0

Aber wie viele gibt es zur Laufzeit beim Ausführen/Debug Ihr Code ...? – mm8

Antwort