梦若夕阳海
穷其一生的追求

这次在做项目中,遇到了这样一个问题:datable中列头的名字是不确定的,从数据库中动态查出来的,假设为typeDATA,行的数据中又包含了列头的信息,并按固定的字段分组,当查处行的数据之后用来填充每列的值,用来统计对应的列的信息,如下:

//查处获取列的表头的数据 

public DataTable typeDATA
        {
            get {
                StringBuilder typeString = new StringBuilder(@"SELECT  [ID] ,[Name] FROM a");
                string Typequery = string.Format(typeString.ToString());
               return DbHelperSQL.Query(Typequery).Tables[0];
            }
        }

 

//行的table数据并进行列的数据填充和转换

 DataTable dt = new DataTable();
            StringBuilder cnnString = new StringBuilder(@"select No,
                                                       Name  '类型',COUNT(No ) as '个数'   from b                                                       inner join PersonPlan on viewHandAll .LineId=PersonPlan .ID 
                                                       group by No,Name");
            StringBuilder sbWhere = new StringBuilder();
            string query = string.Format(cnnString.ToString(), 1, (this.PageIndex - 1) * this.Rows + 1, this.PageIndex * this.Rows);
            var data = DbHelperSQL.Query(query).Tables[0];

            
            DataColumn dc = null;
            //添加表头数据
foreach (DataRow item in typeData.Rows) { dt.Columns.Add(item["Name"].ToString(), Type.GetType("System.String")); } //k用来和前一行进行比较,看是否与下一行的数据相同,但对应的列的值是不同的,若是同一种数据但不同的列值,则只做添加一行数据处理,不能添加多行,但行的数据要填充到不同的列中
int k = -1; for (int i=0;i<data.Rows.Count;i++) { DataRow row = dt.NewRow(); for (int j = 0; j < typeData.Rows.Count; j++) { if (data.Rows[i]["类型"].ToString() == typeData.Rows[j]["Name"].ToString()) { row[typeData.Rows[j]["Name"].ToString()] = data.Rows[i]["个数"].ToString(); } } k++; if (k>0 && data.Rows[k]["No"] == data.Rows[i]["No"]) //set as the same row but different column when current row is the same as second. { i++; continue; } dt.Rows.Add(row); }

  

 

posted on 2015-03-25 16:44  梦若夕阳海  阅读(274)  评论(0编辑  收藏  举报