【问题标题】:List<T> to datatable returns empty - WPFList<T> 到数据表返回空 - WPF
【发布时间】:2016-11-17 22:40:33
【问题描述】:

我正在使用以下代码从List&lt;double[]&gt; list 填充datatable 但未填充数据表。

private void LoadThis(object sender, EventArgs e)
        {
            X model = DataContext as X;

            List<double[]> list = new List<double[]>();
            for (int i = 0; i < model.RowFijtable; i++)
            {
                double[] rowdata = new double[model.ColFijtable];
                for (int j = 0; j < model.ColFijtable; j++)
                {
                    rowdata[j] = model.TauTable[i, j];
                }
                list.Add(rowdata);
            }
            DataTable table = ConvertListToDataTable(list);
            dataGridView1.ItemsSource = table.AsDataView(); //Is this correct?
}

  private DataTable ConvertListToDataTable(List<double[]> list)
    {
        DataTable table = new DataTable();

        // Get max columns.
        int columns = 0;
        foreach (var array in list)
        {
            if (array.Length > columns)
            {
                columns = array.Length;
            }
        }

        // Add columns.
        for (int i = 0; i < columns; i++)
        {
            table.Columns.Add();
        }

        // Add rows.
        foreach (var array in list)
        {
            table.Rows.Add(array);
        }

        return table;
    }

这就是我在XAML中放置信息的方式

<Grid>
    <DataGrid HorizontalAlignment="Stretch"
     VerticalAlignment="Stretch"
     Name="dataGridView1"
     Loaded="LoadThis"
     ItemsSource="{Binding}"
     AutoGenerateColumns="True"/>
</Grid>

我可以看到列数和行数正确传递到数据表,但没有数据值,即使 List 有完整的数据集!

我也尝试过dataGridView1.DataSource = table;,但这让我出错,因为“Datagrid 不包含 DataSource 的定义”..

【问题讨论】:

    标签: c# wpf datatable datagrid


    【解决方案1】:

    调用table.Rows.Add(array) 似乎将整个数组放入第一列值。要将数组元素放入连续的列中,请尝试以下操作:

        private DataTable ConvertListToDataTable(List<double[]> list)
        {
            DataTable table = new DataTable();
    
            // Get max columns.
            int columns = 0;
            foreach (var array in list)
            {
                if (array.Length > columns)
                {
                    columns = array.Length;
                }
            }
    
            // Add columns.
            for (int i = 0; i < columns; i++)
            {
                // Provide default column name & data type
                table.Columns.Add("Column" + (i+1).ToString(), typeof(double) );
            }
    
            // Add rows.
            foreach (var array in list)
            {
                // assign each array element to the appropriate column
                var row = table.NewRow();
                for (int i = 0; i < array.Length; ++i )
                    row.SetField( i, array[i] );
                table.Rows.Add(row);
            }
    
            return table;
        }        
    

    【讨论】:

    • 感谢工作!有什么方法可以添加“行名”吗?像 table.columns.add() 语句? @JohnD
    • 没有内置的行名概念 - 但是您可以在开头添加一个名为“RowDescription”或“RowName”的列,并使用总结行的信息自行填写。
    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多