动态创建DataTable

DataTable 对象是内存中的数据表格,由数据行(DataRow),数据列(DataColumn),组成。
多个DataTable又可以构成一个DataSet对象,不同DataTable对象之间的关系,可以通过DataRelation,Contraint和ForeignKeyConstraint来描述。DataTable对象包含了一些重要属性,如表示表名称的TableName,行集合的Rows,列集合的Columns,以及表示列之间的约束关系集合的Constraints等。

   DataTable对象的常用属性及其说明
Rows----------行集合
Columns---------列集合
Constraints----------约束的集合
ChildRelations-------子关系的集合
TableName---------表集合
DataSet---------所属的DataSet对象
DefaultView--------表视图

DataTable对象的行和列都可以动态添加:
//添加新行
dt.Columns.Add(new DataColumn("NewColumn",typeof(string)));

//添加新行
DataRow newRow = dt.NewRow();
dt.Rows.Add(newRow);


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Text;

public partial class CreateDataTable : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
  ReadData();
    }

 private void ReadData()
 {   ///创建数据库链接
  string conString = ConfigurationManager.ConnectionStrings["SQLCONNECTIONSTRING"].ConnectionString;
  SqlConnection myCon = new SqlConnection(conString);
  ///创建执行命令
  SqlCommand myCmd = new SqlCommand("SELECT TOP 5 * FROM Catalog ORDER BY ID DESC",myCon);
  ///定义dr
  SqlDataReader dr = null;

  try
  {   ///打开数据库的链接
   myCon.Open();
   ///从数据库读取数据
   dr = myCmd.ExecuteReader(); 
 
   ///创建DataTabel,并显示DataTable中的数据
   ShowData(CreateDataTableData(dr));
  }
  catch(Exception ex)
  {
   Response.Write(ex.Message);
  }
  finally
  {   ///关闭数据库的链接
   myCon.Close();
  }
 }

 private DataTable CreateDataTableData(SqlDataReader dr)
 {
  DataTable dt = new DataTable();
  ///创dt的列
  foreach(DataRow row in dr.GetSchemaTable().Rows)
  {   ///需要列的名称和数据类型
   dt.Columns.Add(new DataColumn(row["ColumnName"].ToString(),(Type)row["DataType"]));
  }
  ///读取数据
  while(dr.Read())
  {   ///创建一个新行
   DataRow newrow = dt.NewRow();
   foreach(DataRow row in dr.GetSchemaTable().Rows)
   {   ///读取数据
    newrow[row["ColumnName"].ToString()] = dr[row["ColumnName"].ToString()];
   }
   ///添加新行
   dt.Rows.Add(newrow);
  }
  ///关闭读取器
  dr.Close();
  return (dt);
 }

 private void ShowData(DataTable dt)
 { 
  StringBuilder sb = new StringBuilder();
  ///添加表头
  sb.Append("<table border=1>");
  ///添加表的标题栏
  sb.Append("<tr>");
  for(int i = 0; i < dt.Columns.Count; i++)
  {
   sb.Append("<td bgcolor=gray>");
   sb.Append(dt.Columns[i].ColumnName);
   sb.Append("</td>");
  }
  sb.Append("</tr>");
  ///添加数据
  foreach(DataRow row in dt.Rows)
  {   ///添加一行数据
   sb.Append("<tr>");
   for(int i = 0; i < row.ItemArray.Length; i++)
   {   ///添加数据的列
    sb.Append("<td>");
    sb.Append(row.ItemArray[i].ToString());
    sb.Append("</td>");
   }
   sb.Append("</tr>");
  }
  ///添加结束符号
  sb.Append("</table");
  sb.Append("<hr />");
  ///输出字符串
  Response.Write(sb.ToString());
 }
}

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/king99one/archive/2008/12/18/3549859.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值