1
我正在从数据库加载DataTable,但不希望它看起来的样子。这就是为什么我决定创建一个新的DataTable,并用我收到的数据填充它。 不幸的是,数据并没有完全显示在DataGrid中。更详细地说,只显示第一列,但其他列不显示。在调试时,我可以确保DataTable正确填充。Datagrid不显示完整的数据Datatable
有没有人有想法我做错了什么?
型号:
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;
}
视图模型:
public DataTable ValueTable
{
get
{
return model.getValueTable(ListSelectableValues);
}
}
查看:
<DataGrid DockPanel.Dock="Top" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" AutoGenerateColumns="True" ItemsSource="{Binding Path=ValueTable}"/>
编辑: enter image description here
并返回的数据表实际上有多少列?你看到什么专栏?如果绑定到它的DefaultView属性会怎么样; ItemsSource =“{Binding Path = ValueTable.DefaultView}? – mm8
我不知道会有多少列,它可能总是不一样但我确实证明了所有列都显示正确,只有值缺失。将更新我的文章,并给你一个屏幕截图。绑定defaultView并没有解决我的问题。我甚至试图返回DataView(.AsDataView())在我的ViewModel。 –
但是有多少人在运行时,当你运行/调试你的代码...? – mm8