注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天边云E家 shaoruisky

IT博文共享,知识的海洋

 
 
 

日志

 
 

DataGrid把数据转换为纵向显示  

2015-02-07 17:08:15|  分类: C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

介绍:
我们从数据库中取出来的数据,一般来说都是横向视图的(即一行表示一条纪录),如果我们因为某些特殊的原因,需要把数据转换为纵向视图(即一列表示一条纪录),该怎么做呢?


分析:
我们从数据库中取出的数据,都是以表状视图存储在数据集(如DataSet)或者纪录集中的,这个表相当于一个矩阵,如果我们要把里面的数据转换视图,那么我们只需要将这个矩阵转置(简单的说就是把一个表中的列转换为另外一个表的行)就行了(如下所示),然后的显示方法就是一样的了。

1 2 3         1 4 7
4 5 6     =>2 5 8
7 8 9         3 6 9  

方法:
分别以DataGrid和HtmlTable来显示转换前和转换后的数据,先读取数据库中的纪录存到一个DataSet中,然后从DataSet中读取数据并创建HtmlTable的行和列。



   foreach (DataColumn dc in ds.Tables[”table1″].Columns)
   {
    //转换数据视图
    TableRow trow = new TableRow();
    TableCell tcell = new TableCell();
    foreach (DataRow dr in ds.Tables[”table1″].Rows)
    {
     //循环添加标题
     tcell.Text = dc.ColumnName;
     trow.BackColor = System.Drawing.Color.LemonChiffon;
     tcell.BackColor = System.Drawing.Color.LightGreen;
     tcell.Controls.Add(new LiteralControl(dc.ColumnName.ToString()));
     trow.Cells.Add(tcell);
    }
    foreach (DataRow dr in ds.Tables[”table1″].Rows )
    {
     //循环添加表格数据
     TableCell tcelldata = new TableCell();  //创建新行(数据行)
     tcelldata.Controls.Add(new LiteralControl(dr[dc.ColumnName].ToString()));
     trow.Cells.Add(tcelldata);
    }
    Table1.Rows.Add(trow);  //添加表格行(包括标题和数据的行)
   }
  }


  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //
   InitializeComponent();
   base.OnInit(e);
  }
  
  /// 
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// 
  private void InitializeComponent()
  {    
   this.Load += new System.EventHandler(this.Page_Load);


  }
  #endregion
 }
}


 

代码:
DataGrid_valign.aspx
——————–
<%@ Page language=”c#” Codebehind=”DataGrid_valign.aspx.cs” AutoEventWireup=”false” Inherits=”test.DataGrid_valign” %>
<HTML>
<HEAD>
<title>DataGrid数据视图转换</title>
</HEAD>
<body>
<form id=”Form1″ runat=”server”>
<h1 align=”center”>把表格数据转换为横向显示</h1>
原始数据<br>
<asp:datagrid id=”DataGrid1″ runat=”server” BackColor=”LemonChiffon”>
<HeaderStyle BackColor=”LightGreen”></HeaderStyle>
</asp:datagrid>


<br>转换后的数据<br>
<asp:table id=”Table1″ runat=”server”></asp:table></form>
</body>
</HTML>
——————-
DataGrid_valign.aspx.cs
——————-
using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
/*
Filename     : DataGrid_valign.aspx.cs
Author       : AYEEL
Description  : 把数据转换为纵向视图  
 */
namespace test
{
 public class DataGrid_valign : System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.Table Table1;
  protected System.Web.UI.WebControls.DataGrid DataGrid1;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 初始化页面
            SqlConnection Conn = new SqlConnection();
   string connStr = “server=localhost;database=Northwind;user id=n;password=n”;
   Conn.ConnectionString = connStr;
   string sqlStr = “select EmployeeID,LastName,FirstName,TitleOfCourtesy from Employees”;
   SqlDataAdapter cmd2 = new SqlDataAdapter(sqlStr,Conn);
   DataSet ds = new DataSet();
   cmd2.Fill(ds,”table1″);;
   //数据绑定
   DataGrid1.DataSource = ds.Tables[”table1″].DefaultView;
   DataGrid1.DataBind();

   foreach (DataColumn dc in ds.Tables[”table1″].Columns)
   {
    //转换数据视图
    TableRow trow = new TableRow();
    TableCell tcell = new TableCell();
    foreach (DataRow dr in ds.Tables[”table1″].Rows)
    {
     //循环添加标题
     tcell.Text = dc.ColumnName;
     trow.BackColor = System.Drawing.Color.LemonChiffon;
     tcell.BackColor = System.Drawing.Color.LightGreen;
     tcell.Controls.Add(new LiteralControl(dc.ColumnName.ToString()));
     trow.Cells.Add(tcell);
    }
    foreach (DataRow dr in ds.Tables[”table1″].Rows )
    {
     //循环添加表格数据
     TableCell tcelldata = new TableCell();  //创建新行(数据行)
     tcelldata.Controls.Add(new LiteralControl(dr[dc.ColumnName].ToString()));
     trow.Cells.Add(tcelldata);
    }
    Table1.Rows.Add(trow);  //添加表格行(包括标题和数据的行)
   }
  }

http://www.c-sharpcorner.com/Code/2003/May/DisplayVerticalData.asp

        GridView的视图“横过来”


private void Test()
{
DataTable dtOld;
DataTable dtNew = TransformDataTable(dtOld);
BindDataForGridView(dtNew);
}

private void BindDataForGridView(DataTable paramDt)
{
int iColumnCount = paramDt.Columns.Count;

gvMain.ShowHeader = false;
gvMain.Columns.Clear();

for(int i = 0; i <= iColumnCount - 1; i++)
{
BoundField bf = new BoundField();
bf.DataField = paramDt.Columns[i].ColumnName;
gvMain.Columns.Add(bf);
}

gvMain.DataSource = paramDt;
gvMain.DataBind();
}

private DataTable TransformDataTable(DataTable paramDt)
{
DataTable dtResult = new DataTable();
int iRowCount = paramDt.Rows.Count;
int iColumnCount = paramDt.Columns.Count;
dtResult.Columns.Add("Head");
for(int i = 1; i <= iRowCount; i++)
{
dtResult.Columns.Add("Data" + i.ToString());
}

for(int i = 0; i <= iColumnCount - 1; i++)
{
DataRow dr = dtResult.NewRow();
dr["Head"] = paramDt.Columns[i].ColumnName;
for(int j = 1; j <= iRowCount; j++)
{
dr["Data" + j.ToString()] = paramDt.Rows[j - 1][i].ToString();
}
dtResult.Rows.Add(dr);
}
return dtResult;
}

  评论这张
 
阅读(193)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016