当前位置:编程学习 > C#/ASP.NET >>

遍历一个list 如何给Datatable的行进行赋值呢?

   各位大神好,小弟现在要做一个小功能,例如用户输入一组随机数据,个数不定,如“111112212121111122222”这样的一组数据,通过拆分,放到datatagridview里面去,每列的行数只是4个而已,如果相邻的数超过了4个,那么就在后一行补足,效果如下图 --------------------编程问答--------------------  private void button1_Click(object sender, EventArgs e)
        {
            string numberStr = textBox1.Text.Trim();   //接收用户输入的数据
            string temp = string.Empty;               //定义变量temp
            string column = string.Empty;             //定义变量column
            List<string> lstColumn = new List<string>();

            DataTable table = new DataTable();         //定义一个临时table
            DataColumn dcolumn;                        //定义列
            DataRow row;                               //定义行 

            row = table.NewRow();
            table.Rows.Add(row);

            

            numberStr.ToCharArray().ToList().ForEach((char c) =>
            {
                if (string.IsNullOrEmpty(temp))
                {
                    temp = c.ToString();
                }

                if (temp == c.ToString())
                {
                    column += c;
                }
                else
                {
                    lstColumn.Add(column);
                    temp = c.ToString();
                    column = temp;
                }
            });
            lstColumn.Add(column);


            //遍历LstColumn  为table的列赋值

            int id = 0;
            foreach (var item in lstColumn)
            {
                id++;
                if (item.Length <= 4)      //判断item的长度
                {
                    dcolumn = new DataColumn();
                    dcolumn.ColumnName = id.ToString();
                    table.Columns.Add(dcolumn);
                }
                else
                {
                    dcolumn = new DataColumn();
                    dcolumn.ColumnName = id.ToString();
                    table.Columns.Add(dcolumn);
                }
            }
            //遍历列,对列中的数据赋值到行中
            foreach (var item in lstColumn)
            {
                int i = 0;//

                foreach (var subItem in item)
                {
                    int j = 0;
                    table.Rows[j][i] = subItem.ToString();
                    j++;
                }
                i++;

            }           
            dg.DataSource = table;

        }

    }
}


   

        

 这是小弟自己写的源码,但是效果不出来,请各位大神指点,谢谢 --------------------编程问答-------------------- 各位大神,难道我的问题太简单了?各位都不屑?  坐等各位大神指点迷津 --------------------编程问答-------------------- 给dt赋值你只要知道dt.row[i]["colname"]=.... --------------------编程问答--------------------
引用 3 楼 Joyhen 的回复:
给dt赋值你只要知道dt.row[i]["colname"]=....

这位大哥,我用索引为什么不行? --------------------编程问答--------------------
引用 4 楼 SD5152 的回复:
Quote: 引用 3 楼 Joyhen 的回复:

给dt赋值你只要知道dt.row[i]["colname"]=....

这位大哥,我用索引为什么不行?

我代码中有什么需要修改的吗? --------------------编程问答-------------------- 换一种常规的方法来实现。就是定制好一个只有4列的表,
然后循环和判断输入的随机数来填充每一个。
如果某一字符与前一字符不相同时,需另起一行。

到最后,再做一次行列转换即可。

--------------------编程问答-------------------- 常规的方法?小弟愚昧,请大神指点清楚一下 --------------------编程问答--------------------
引用 6 楼 insus 的回复:
换一种常规的方法来实现。就是定制好一个只有4列的表,
然后循环和判断输入的随机数来填充每一个。
如果某一字符与前一字符不相同时,需另起一行。

到最后,再做一次行列转换即可。
常规的方法?小弟愚昧,请指点 --------------------编程问答-------------------- 你自己琢磨去好了 --------------------编程问答-------------------- 111112212121111122222

11111,22,1,2,12,11111,22222

char [] c = 111112212121111122222.toCharArray();
string out=null;
string in = null;
fro(int i = 0; i<c,lengthi++)
{
if(c==0)
out=c[i]
else 
out=c[i-1];
if(c[i]==out)
in+=c[i]
else
in+=','
}
---
当前字符与过去的不一样就加一个逗号吧他们分开这时in就是11111,22,1,2,12,11111,22222
————
string in[] = in.spilt(',')
这时in就是11111][22][1][2][12][11111][22222]
然后每个数组取得模数
in[i],lengthi%4
1为例子,得到1
这时候你的单元就是当前列加1列,赋值就写循环吧

手写的我意思就这样,你在改一下,有时间给你写全 --------------------编程问答-------------------- in[i],lengthi%4
1为例子,得到1


如果in[i].length % 4  有余数呢?那么就该怎么加? --------------------编程问答-------------------- 有余数另起一行 --------------------编程问答--------------------  private void button1_Click(object sender, EventArgs e)
        {
            string numberStr = textBox1.Text.Trim();   //接收用户输入的数据
            string temp = string.Empty;               //定义变量temp
            string column = string.Empty;             //定义变量column
            List<string> lstColumn = new List<string>();

            DataTable table = new DataTable();         //定义一个临时table
            DataColumn dcolumn;                        //定义列
            DataRow row;                               //定义行 

            row = table.NewRow();
            table.Rows.Add(row);



            numberStr.ToCharArray().ToList().ForEach((char c) =>
            {
                if (string.IsNullOrEmpty(temp))
                {
                    temp = c.ToString();
                }

                if (temp == c.ToString())
                {
                    column += c;
                }
                else
                {
                    lstColumn.Add(column);
                    temp = c.ToString();
                    column = temp;
                }
            });
            lstColumn.Add(column);


            //遍历LstColumn  为table的列赋值
            int id = 0;
            foreach (var item in lstColumn)
            {
                id++;
                dcolumn = new DataColumn();
                dcolumn.ColumnName = id.ToString();
                table.Columns.Add(dcolumn);
                if (item.Length > 4)      //判断item的长度
                {
                    int consult = 0;   //余数
                    int quotient = Math.DivRem(item.Length, 4, out consult);
                    if (consult != 0)
                    {
                        for (int k = 0; k < quotient; k++)
                        {
                            id = id + k;
                        }
                        id++;
                        dcolumn = new DataColumn();
                        dcolumn.ColumnName = id.ToString();
                        table.Columns.Add(dcolumn);
                    }
                    else
                    {
                        dcolumn = new DataColumn();
                        dcolumn.ColumnName = id.ToString();
                        table.Columns.Add(dcolumn);
                    }
                }
            }
            //遍历列,对列中的数据赋值到行中

            int i = 0;
            foreach (var item in lstColumn)
            {
                int j = 0;
                foreach (var subItem in item)
                {
                    table.Rows[j][i] = subItem.ToString();
                    row = table.NewRow();
                    table.Rows.Add(row);

                    if (j == 3)
                    {
                        j = 0;
                        i++;
                    }
                    else j++;
                }
                i++;
            }
            dg.DataSource = table;
        }




代码我修改了,然后现在出现了一个问题,  相邻的数字 如果输入相同的数超过了8个,就会报错  错误信息是:无法找到列 2  
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,