DataTable常用操作分享

NetX行者 2011-10-13 10:26:51


protected void Page_Load(object sender, EventArgs e)
{
//①创建DataTable
DataTable dt = new DataTable("Table_AX");

//②为DataTable增加列
//方法 1
dt.Columns.Add("column0", System.Type.GetType("System.String"));
//方法 2
DataColumn dc = new DataColumn("column1", System.Type.GetType("System.Boolean"));
dt.Columns.Add(dc);

//③为 DataTable增加行
//★增加初始化的行
DataRow dr = dt.NewRow();
dr["column0"] = "AX";
dr["column1"] = true;
dt.Rows.Add(dr);
//★增加未初始化的行
DataRow dr1 = dt.NewRow();
dt.Rows.Add(dr1);

//④查找
//Search the second row 如果没有赋值,则用is null来select
DataRow[] drs = dt.Select("column1 is null");
DataRow[] drss = dt.Select("column0 = 'AX'");


//⑤复制 DataTable 包括数据
DataTable dtNew = dt.Copy();

//⑥Copy DataTable only scheme
DataTable dtOnlyScheme = dt.Clone();

//⑦操作一行
//★都是对dt的操作
//方法1
DataRow drOperate = dt.Rows[0];
drOperate["column0"] = "AXzhz";
drOperate["column1"] = false;
//方法2
drOperate[0] = "AXzhz";
drOperate[1] = false;
//方法3
dt.Rows[0]["column0"] = "AXzhz";
dt.Rows[0]["column1"] = false;
//方法4
dt.Rows[0][0] = "AXzhz";
dt.Rows[0][1] = false;

//⑧Evaluate another DataTable's row to current Datatable
dtOnlyScheme.Rows.Add(dt.Rows[0].ItemArray);

//⑨Use Rowstate
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//不知道怎么才能使Row的State变为DataRowState.Deleted
//More further,怎样设置Row的State
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■
if (dt.Rows[0].RowState == DataRowState.Unchanged)
{
//Your logic
}

//⑩Convert to string
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Xml.XmlTextWriter xw = new System.Xml.XmlTextWriter(sw);
dt.WriteXml(xw);
string s = sw.ToString();

//ⅰ.string convert to DataTable【Doesn't achieve it】
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//没有把string成功转换为DataTable ■■已实现,参见追加■■
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//DataTable dtConvert = new DataTable();
//System.IO.StringReader stream = new System.IO.StringReader(s);
//System.Xml.XmlReader xtr = new System.Xml.XmlTextReader(stream);
//dtConvert.ReadXml(xtr);

//ⅱ.Filter DataTable
//It's so strange that the second row has been filtered
//the second row show in GridView never
//It means null field will be filter always.
//Filter the all conditions
dt.DefaultView.RowFilter = "column1 <> true";
//dt.DefaultView.RowFilter = "column1 = true";

dt.DefaultView.RowStateFilter = DataViewRowState.Added;

//ⅲ.Sort row
//Stupid method
DataRow[] drsss = dt.Select(String.Empty, "column0 DESC , column1 ASC");
//Clever method
dt.DefaultView.Sort = "column0 , column1 ASC";

//ⅳ.Bind DataTable
//绑定的其实是DefaultView
gvTestDataTable.DataSource = dt;
gvTestDataTable.DataBind();
}



【追加】判断一个字符串是否为DataTable的列名

dtInfo.Columns.Contains("AX");



【追加】DataTable与XML的转换

protected void Page_Load(object sender, EventArgs e)
{
DataTable dt_AX = new DataTable();

//dt_AX.Columns.Add("Sex", typeof(System.Boolean));
//DataRow dr = dt_AX.NewRow();
//dr["Sex"] = true;
//dt_AX.Rows.Add(dr);

string xml=ConvertBetweenDataTableAndXML_AX(dt_AX);
DataTable dt = ConvertBetweenDataTableAndXML_AX(xml);
}

public string ConvertBetweenDataTableAndXML_AX(DataTable dtNeedCoveret)
{
System.IO.TextWriter tw = new System.IO.StringWriter();
//if TableName is empty, WriteXml() will throw Exception.
dtNeedCoveret.TableName=dtNeedCoveret.TableName.Length==0?"Table_AX":dtNeedCoveret.TableName;
dtNeedCoveret.WriteXml(tw);
dtNeedCoveret.WriteXmlSchema(tw);
return tw.ToString();
}

public DataTable ConvertBetweenDataTableAndXML_AX(string xml)
{
System.IO.TextReader trDataTable = new System.IO.StringReader(xml.Substring(0, xml.IndexOf("<?xml")));
System.IO.TextReader trSchema = new System.IO.StringReader(xml.Substring(xml.IndexOf("<?xml")));
DataTable dtReturn = new DataTable();
dtReturn.ReadXmlSchema(trSchema);
dtReturn.ReadXml(trDataTable);
return dtReturn;
}



【追加】排序的好方法

dt.DefaultView.Sort = "ID ,Name ASC";
dt=dt.DefaultView.ToTable();

...全文
165 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
一一一一 2011-10-13
  • 打赏
  • 举报
回复
收藏。。。
likevs 2011-10-13
  • 打赏
  • 举报
回复
这帖子我得顶,这是必须的
CalvinR 2011-10-13
  • 打赏
  • 举报
回复
谢谢楼主分享
SomethingJack 2011-10-13
  • 打赏
  • 举报
回复
咿...把JSON转换加上就更好了
不冷孩 2011-10-13
  • 打赏
  • 举报
回复
站位,接分。。。
dalmeeme 2011-10-13
  • 打赏
  • 举报
回复
支持分享
NqIceCoffee 2011-10-13
  • 打赏
  • 举报
回复
支持分享
yue547283947 2011-10-13
  • 打赏
  • 举报
回复
接分
zell419 2011-10-13
  • 打赏
  • 举报
回复
mark 。

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧