将List<string>添加到DataTable

3
我创建了一个类库,并尝试从 List 中添加数据到 DataGridView 中。字符串的格式如下所示:"Test, 1^Glucose^10/24/2013 10:00;Test, 2^BUN^10/25/2013 11:00;Test, 3^BUN^10/25/2013 11:00"。我正在从另一个程序中传递该字符串。然后将其转换为列表,但尝试将其添加到 DataTable 中时失败了。我的 DataGridView 包含四列:
- Selected - 复选框 - Patient Name - 字符串 - Order Name - 字符串 - Order Date - 字符串 - Reason - 下拉框
我收到了错误信息:“列表大于列数”。注意:在将字符串传递到该程序之前,我可以根据需要对其进行处理,请让我知道是否需要在传递到程序之前处理字符串。是否有更简单的方法?我只想显示数据,其他方面我会继续努力。任何帮助都将不胜感激。
以下是我的代码:
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;
    }
}

1
请始终只发布相关的内容。 - nawfal
1个回答

3

首先,您需要适当地拆分字符串,以获取字符串数组的列表。可以像这样实现:

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;

在这里看一个示例(链接)。目前为止,你的逗号分隔输入字符串似乎与数据表列结构不匹配。你需要解决这个问题。但我希望你明白了应该走哪条路。


@eusanpe,这首先怎么可能呢?strMLMPatientData是字符串类型,如何能够保存像"Test, 1","Glucose","10/24/2013 10:00";"Test, 2","BUN","10/25/2013 11:00"这样的内容?它是一个大字符串吗?像"Test, 1,Glucose,10/24/2013 10:00;Test, 2,BUN,10/25/2013 11:00"这样的? - nawfal
1
当我考虑到时,你是正确的。让我重新做一遍,并除了开头和结尾之外删除引号。 - eusanpe
除非我看到你的问题有编辑并且看到确切的字符串类型,否则我无法回答。只是为了给出一个方向,您可能需要使用new List<string[]>(strMLMPatientData.Split(';').Select(x => x.Split(',')))来进行实际的拆分部分。 - nawfal
1
我可能需要为分割格式化我的字符串,因为'Test, 1'是一个患者的名字,它有一个逗号,所以它会被错误地分割。我需要找到另一个未使用的字符。 - eusanpe
@eusanpe 没错,这就是我看到你的字符串时所想的。它与你的列不匹配。 - nawfal
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接