为数据表添加多行以动态创建列

时间:2014-01-02 06:08:29

标签: c# datatable

大家好我得到一个字符串,如下所示,要在变量中插入数据。

我编写了一个代码,将其框架为DataTable,如下所示:

 protected void Page_Load(object sender, EventArgs e)
        {
            var vData = "ID=1;Name='XYZ';ID=2;Name='PQR'";
            var values = vData.Replace(";", ",");
            var cols = values.Split(',');
            DataTable dt = new DataTable();
            for (int i = 0; i < cols.Length; i++)
            {
                var p = cols[i].Split('=');
                if (!dt.Columns.Contains(p[0].ToString()))
                    dt.Columns.Add(p[0].ToString());
            }
            DataRow dr = dt.NewRow();
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                var value = cols[j].Split('=');
                dr[j] = value[1];
            }
            dt.Rows.Add(dt);
        }

但是这只添加了一行,因为该列始终为2,但如果数据超出

,我需要添加多行

1 个答案:

答案 0 :(得分:3)

您可以尝试下面的内容,它会添加多行。

我做的是,我使用正则表达式对ID进行计数,并为循环下面的循环添加额外的循环。

var v = "ID=1;Name='XYZ';ID=2;Name='PQR';";
        string newRow = "ID";
        var values = v.Replace(";", ",");
        values = values.Remove(values.Length - 1, 1);
        var cols = values.Split(',');

        string pattern = Regex.Escape(cols[0].Split('=')[0]);
        var matches = Regex.Matches(v, "\\b" + pattern + "\\b", RegexOptions.IgnoreCase);
        int count = matches.Count;


        DataTable dt = new DataTable();

        for (int i = 0; i < cols.Length; i++)
        {
            var p = cols[i].Split('=');
            if (!dt.Columns.Contains(p[0].ToString()))
                dt.Columns.Add(p[0].ToString());
        }
        DataRow dr = null;
        int idxCol = 0;
        for (int k = 0; k < count; k++)
        {
            for (int j = 0; j < dt.Columns.Count; j++)
            {
                var value = cols[idxCol].Split('=');

                if (value[0] == newRow)
                {
                    dr = dt.NewRow();
                    dr[j] = value[1];
                }
                else
                {
                    dr[j] = value[1];
                }
                idxCol++;
            }
            dt.Rows.Add(dr);
        }

您仍然可以重新考虑它并输入正确的值。这对你来说只是一个想法。