这次在做项目中,遇到了这样一个问题: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); }

  

C# datatable竖行转换的问题的更多相关文章

  1. LinQ实现DataTable不定行转列 行列转换,有图

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="LinqDemo2.aspx.c ...

  2. 利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model

    利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model   使用场景:网站配置项目,为了便于管理,网站有几个Model类来管理配置文件, 比如ConfigWebsiteMo ...

  3. ALT+TAB切换时小图标的添加 界面透明 屏幕大小 竖行字体 进程信息

    一,ALT+TAB切换时小图标的添加 Dlg类中添加变量 protected: HICON m_hIcon; #define IDR_MAINFRAME 128 ICON IDR_MAINFRAME, ...

  4. 关于datatable linq的转换

    关于datatable datarow DataTable paraval = GetParaVal(DateCondition, strUrl, Page, RowPage, iYearMonthN ...

  5. datatable赋值行

    datatable复制行:DataTable dt = "";  //这里是填充DataTable数据(""中为一个为datatable类型的值,赋值给dt)D ...

  6. PostgreSQL控制台以竖行显示

    \x select * from user; 这个和MySQL的有点区别,在查询之前使用\x进行显示的开启 注意:只需要用一次即可,以后的查询都是以竖行进行显示.

  7. ios 开发之 -- UILabel的text竖行显示

    让UILabel的内容竖行显示,我经常用一下两种方式: 第一种:使用换行符 \n label.text = @"请\n竖\n直\n方\n向\n排\n列"; label.number ...

  8. 删除datatable的行后,出现“不能通过已删除的行访问该行的信息”的错误,即DeletedRowInaccessibleException

    删除datatable的行后,出现“不能通过已删除的行访问该行的信息”的错误 =========================================================== 采 ...

  9. jquery datatable 多行(单行)选择(select),行获取/行删除

    jquery datatable 多行(单行)选择(select),行获取/行删除 代码展示 // 示例数据源 var dataSet = [ ['Tasman','Internet Explorer ...

随机推荐

  1. IOS UI-UISearchController

    ViewController.m // // ViewController.m // IOS_0224_查找联系人 // // Created by ma c on 16/2/24. // Copyr ...

  2. Esper——内存计算、事件驱动、SQL支持

    教程简介Esper是一个事件流处理(ESP)和事件关联引擎(CEP的,复杂事件处理).Esper的目标是针对实时事件驱动架构(EDA).当Esper监测到事件流中又符合条件的时间发生时,即可触发Pla ...

  3. oracle数据库简单的导入导出操作

    一.数据库导出 1.导出用户名/密码,,导出用户名为test_expdp.导出路径默认为oracle中的dpdump文件中 expdp test_expdp/test_expdp@orcl direc ...

  4. javascript打开新窗体

    open -- 打开(弹出)一个新的窗体 open,中文"打开"的意思 引用网址:http://www.dreamdu.com/javascript/window.open Jav ...

  5. qml 与C++交互

    最近一直在研究qml 怎么与C++交互,今天在网上看到一段代码忽然想明白了,哦!!!我在QT还只是一个小白,嘿嘿 首先在我们定义了CPP文件起名:比如:util.cpp,baidumusic.cpp ...

  6. pulltoRefresh类图

  7. APUE学习笔记——3.文件共享与fcntl介绍

    基本概念 内核使用3个数据结构描述一个打开的文件:进程表.文件表.V节点表 首先了解3种数据结构的概念     1 进程表         每一个进程有一个进程表.进程表里是一组打开的文件描述符,如标 ...

  8. .net 获取客户端Ip地址

    Request.ServerVariables["REMOTE_ADDR"]来取得客户端的IP地址,但如果客户端是使用代理服务器来访问,那取到的就是代理服务器的IP地址,而不是真正 ...

  9. c++多线程在异常环境下的等待

    c++11开始支持多线程编程,相关的类和函数封装在标准库头文件<thread>中,而c++多线程编程很重要的一点就是当用户创建一个std::thread对象,关联了可调用对象后,需要在该t ...

  10. FFmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

    继续看雷霄骅的 课程资料 - 基于FFmpeg+SDL的视频播放器的制作最后一篇,主要是想学一下 MFC 创建和配置. 一.创建 MFC 工程 文件->新建->项目->Visual ...