将List <string>添加到DataTable </string>

时间:2013-06-15 19:16:31

标签: c# .net datatable

我创建了一个类库,我正在尝试将数据从List<string[]>添加到DataGridView。

字符串的格式如下:

  

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

我从另一个程序传递字符串。然后我把它变成一个列表,然后尝试将它添加到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;
    }
}

1 个答案:

答案 0 :(得分:2)

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

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。就目前而言,您的逗号分隔输入字符串似乎与您的数据表列结构不匹配。你需要解决它。但我希望你知道要走哪条路。