【问题标题】:Datagrid does not show full Data of DatatableDatagrid不显示Datatable的完整数据
【发布时间】:2017-12-24 11:13:43
【问题描述】:

我正在从数据库中加载一个 DataTable,但不想让它看起来像它的样子。这就是为什么我决定创建一个新的 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

【问题讨论】:

  • 返回的DataTable实际有多少列?你看到了什么专栏?如果你绑定到它的 DefaultView 属性怎么办? ItemsSource="{Binding Path=ValueTable.DefaultView}?
  • 我不知道会有多少列,它可能总是不同的。但我确实证明了所有列都正确显示,只有值丢失。我会更新我的帖子并给你一个截图。绑定 defaultView 并没有解决我的问题。我什至尝试在我的 ViewModel 中返​​回 DataView (.AsDataView())。
  • 但是当你运行/调试你的代码时有多少在运行时......?
  • 我检查了 2、3、5 和 7 天,每次都创建了正确的金额列。
  • 那么,请提供可重现的样本:stackoverflow.com/help/mcve

标签: c# .net wpf datatable datagrid


【解决方案1】:

问题在于日期格式:

wpf datatable column name can not have slash /

干杯,

马可

【讨论】:

    猜你喜欢
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    相关资源
    最近更新 更多