【问题标题】:c# datatable/datagrid to List<T>c# datatable/datagrid to List<T>
【发布时间】:2017-11-10 15:48:55
【问题描述】:

我正在将数据从 excel 中提取到 datatable,然后再到 datagrid。数据的格式类似于;

"Time","Dist","speed","susp","rpm"
"0.000","0","235","29","13550"
"0.005","1","240","28.5","13560"
"0.010","2","245","28","13570"
"0.015","3","250","27.5","13580"
"0.020","4","255","27","13590"
"0.025","5","260","26.5","13600"
"0.030","6","265","26","13610"

但是,我拥有的列数和它们的名称事先是未知的,并且会因数据集而异。

在按钮单击事件 (WPF) 上拉入数据;

    private void databtn_Click(object sender, RoutedEventArgs e)
    {
        {
            OpenFileDialog openfile = new OpenFileDialog();
            openfile.DefaultExt = ".xlsx";
            openfile.Filter = "(.xlsx)|*.xlsx";

            var browsefile = openfile.ShowDialog();

            if (browsefile == true)
            {
                datafilepath.Text = openfile.FileName;

                ExcelEngine excelEngine = new ExcelEngine();

                IApplication application = excelEngine.Excel;

                application.DefaultVersion = ExcelVersion.Excel2013;

                IWorkbook workbook = application.Workbooks.Open(datafilepath.Text);

                IWorksheet worksheet = workbook.Worksheets[0];

                DataTable dt = worksheet.ExportDataTable(worksheet.UsedRange, ExcelExportDataTableOptions.ColumnNames);

                DG.ItemsSource = dt.DefaultView;
            }
        }
    }

如何将这些列中的每一个放入单独的值列表中,其中列表的名称由列标题给出?

然后我将使用它们来绘制 x,y 图表; (time,rpm) 或 (distance,rpm) - 我可以这样做,但我似乎无法遍历 datatabledatagrid 中指定列中的值。

我是 c# 和一般编程的新手,很抱歉,如果这是初级的,并提前感谢您提供的任何帮助。

【问题讨论】:

    标签: c# wpf datatable datagrid


    【解决方案1】:

    您可以将列表存储在Dictionary&lt;string, List&lt;object&gt;&gt;

    Dictionary<string, List<object>> dict = dt.Columns.Cast<DataColumn>()
        .ToDictionary(c => c.ColumnName, c => dt.AsEnumerable().Select(r => r[c]).ToList());
    

    这是一个 LINQ 查询,所以您必须添加 using System.Linq

    输出:

    foreach (var kv in dict)
       Console.WriteLine($"Column: {kv.Key}, All values: {String.Join(",", kv.Value)}");
    

    【讨论】:

    • 谢谢,我需要阅读更多关于使用字典的信息。有没有办法通过 foreach 循环或类似的方法返回特定列的内容?只是想将数据放入 x,y 数据序列中。再次感谢
    • 当然,您可以通过 ColumnName 获得列表: List values = dict["ColumnName"];
    • 太棒了!谢谢蒂姆。最后一点,我保证!我可以嵌套这些字典吗?所以我最终会得到一本列表字典的字典......如果这有意义吗?我将有多个列表字典,每个字典都有相同的标题。如果我从不同字典中获取列嵌套在另一个字典中,这会导致问题吗?再次感谢
    猜你喜欢
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2018-02-13
    相关资源
    最近更新 更多