惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
MongoDB | Blog
MongoDB | Blog
D
Docker
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
GbyAI
GbyAI
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
M
MIT News - Artificial intelligence
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
Netflix TechBlog - Medium
B
Blog RSS Feed
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
Vercel News
Vercel News
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
有赞技术团队
有赞技术团队
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
I
InfoQ
U
Unit 42

博客园 - 斧头帮少帮主

猜一猜,会输出什么? ASP.NET错误处理的两种方案_AX Log4Net最简单的使用配置_AX 一个修改后的JS日历(Calendar)控件_AX - 斧头帮少帮主 - 博客园 页面回传(PostBack)后恢复滚动条的位置_AX - 斧头帮少帮主 - 博客园 Hidden Field 的值不能回传(PostBack)到后台_AX Delegate(代理)异常:该委托必须有一个目标 WCF学习随笔6--Version变更--我们在前进_AX WCF学习随笔5--我知道:Known--可憐的孩子_AX WCF学习随笔4--契约|序列化详解--祭斧_AX WCF学习随笔3--第一个Sample--祭斧_AX - 斧头帮少帮主 - 博客园 WCF学习随笔2--Contract--磨斧_AX WCF学习随笔1--扫盲--磨斧_AX 把项目运行情况写入系统日志(Log)的三种方法【续】_AX 把项目运行情况写入系统日志(Log)的三种方法_AX 为用户控件User Control添加事件_AX XML常用操作总结_AX .NET(C#)代码性能优化_AX - 斧头帮少帮主 - 博客园 Panel的不足及弥补_AX - 斧头帮少帮主 - 博客园
DataTable常用操作总结_AX - 斧头帮少帮主 - 博客园
斧头帮少帮主 · 2007-08-01 · via 博客园 - 斧头帮少帮主

【引言】项目中经常使用DataTable,发现有好多东西,需要整理下.

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

        
//②Add columns for DataTable
        
//Method 1
        dt.Columns.Add("column0", System.Type.GetType("System.String"));
        
//Method 2
        DataColumn dc = new DataColumn("column1", System.Type.GetType("System.Boolean"));
        dt.Columns.Add(dc);

        
//③Add rows for DataTable
        
//★Initialize the row
        DataRow dr = dt.NewRow();
        dr[
"column0"= "AX";
        dr[
"column1"= true;
        dt.Rows.Add(dr);
        
//★Doesn't initialize the row
        DataRow dr1 = dt.NewRow();
        dt.Rows.Add(dr1);

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


        
//⑤Copy DataTable include data
        DataTable dtNew = dt.Copy();

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

        
//⑦Operate one row
        
//★都是对dt的操作
        
//Method 1
        DataRow drOperate = dt.Rows[0];
        drOperate[
"column0"= "AXzhz";
        drOperate[
"column1"= false;
        
//Method 2
        drOperate[0= "AXzhz";
        drOperate[
1= false;
        
//Method 3
        dt.Rows[0]["column0"= "AXzhz";
        dt.Rows[
0]["column1"= false;
        
//Method 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();

博客园斧头帮少帮主

少帮主的斧头好久不饮血了!

posted on 2007-08-01 16:40  斧头帮少帮主  阅读(1180)  评论()    收藏  举报