【问题标题】:Adding List<string> to DataTable将 List<string> 添加到 DataTable
【发布时间】:2013-06-15 19:16:30
【问题描述】:

我创建了一个类库,并尝试将数据从 List&lt;string[]&gt; 添加到 DataGridView。

字符串格式如下:

“测试,1^葡萄糖^10/24/2013 10:00;测试,2^BUN^10/25/2013 11:00;测试,3^BUN^10/25/2013 11:00”

我正在从另一个程序传递字符串。然后,我将其添加到列表中,然后尝试将其添加到 DataTable 但没有这样的运气。我用四列创建了 datagridview。

选中 - 复选框

患者姓名 - 字符串

订单名称 - 字符串

订单日期 - 字符串

原因 - 组合框

我收到一个错误:

列表大于列数。

注意:在传递给这个程序之前,我可以创建任何我想要的字符串,所以如果我需要在传递给程序之前对字符串做一些事情,请告诉我。有没有更简单的方法?

我只想显示数据,其余部分我会处理。

任何帮助将不胜感激。

这是我的代码:

public partial class RenewOrders : Form
{
    public static string strMLMPatientData = string.Empty;

    public RenewOrders(string all_patient_data)
    {
        InitializeComponent();
        strMLMPatientData = "Test, 1^Glucose^10/24/2013 10:00;Test, 2^BUN^10/25/2013 11:00;Test, 3^BUN^10/25/2013 11:00"
    }

    private void RenewOrders_Load(object sender, EventArgs e)
    {    
        this.ConvertStringToList(strMLMPatientData);
    }

    private void ConvertStringToList(string strMLMPatientData)
    {
        var patient_list = strMLMPatientData.Split(';').Select(x => x.Split('^')).ToList();
        DataTable dtTable = ConvertListToDataTable(patient_list);
        dataGridView1.DataSource = dtTable;
    }

    // Convert to DataTable.
    static DataTable ConvertListToDataTable(List<string[]> patient_list)
    {
        // New table.
        DataTable dtTable = new DataTable();

        dtTable.Columns.Add("Name", typeof(string));
        dtTable.Columns.Add("Order Name", typeof(string));
        dtTable.Columns.Add("Order Date/Time", typeof(string));
        
        foreach (var row in patient_list)
        {
            table.Rows.Add(row);
        }

        return dtTable;
    }
}

【问题讨论】:

  • 请始终只发布相关内容..

标签: c# .net datatable


【解决方案1】:

首先,您需要适当地吐出字符串以获取字符串数组列表。像这样的:

var patient_list = new List<string[]>(strMLMPatientData.Split(';').Select(x => x.Split(',')));

甚至更好:

var patient_list = strMLMPatientData.Split(';').Select(x => x.Split(',')).ToList();

你需要 Linq,但你明白了。

然后您需要在数据表中添加列。没有列时,您无法向其添加行..

在你的函数中尝试这样的事情

//add columns appropriately
DataTable table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Order", typeof(string));
table.Columns.Add("Date", typeof(string));
foreach (var row in patient_list)
    table.Rows.Add(row);

return table;

查看示例here。就目前而言,您的逗号分隔输入字符串似乎与您的数据表列结构不匹配。你需要解决它。但我希望你知道该走哪条路。

【讨论】:

  • 没有这样的运气。我仍然得到错误:输入数组的长度是表中的列数。
  • 你得到的错误是什么?请使用示例List&lt;string&gt; 更新问题。你给的那个很模糊。
  • 我在代码中添加了字符串的样子。查找字符串 strMLMPatientData。我需要用分号分割每个组,并将组中的每个项目添加到网格中。这有帮助吗?单独传递每个字符串会更容易吗,比如姓名、订单、日期?
  • 我想你是对的。让我重做这个并删除除开头和结尾之外的引号。
  • 我可能需要格式化我的字符串以进行拆分,因为“测试,1”是患者姓名并且它有一个逗号,所以它也会在不应该拆分的时候被拆分。我需要找到另一个不使用的字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2014-04-12
相关资源
最近更新 更多