当前位置: 首页 > news >正文

[C#]DataTable常用操作总结【转】

【引言】项目中经常使用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();



博客园→斧头帮少帮主

 

相关文章:

  • JdbcTemplate查询数据 三种callback之间的区别
  • asp.net 伪静态 IIS设置后 直正HTML无法显示
  • 适配器模式(Adapter)
  • GBK
  • 学习ADO时总结的一些经验
  • sysconf zz
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • Linux的nm查看动态和静态库中的符号
  • 产品验证环节的失语现象
  • LDR指令的应用
  • iptables应用
  • 天啊,原来计算机就是佛,信则灵
  • 如何利用HTTP缓存提高网页性能
  • mysql体系架构
  • 运维自动化之使用Cobbler自动化安装系统与FAQ
  • 【Leetcode】101. 对称二叉树
  • JavaScript-如何实现克隆(clone)函数
  • Angular数据绑定机制
  • CSS实用技巧干货
  • DOM的那些事
  • JAVA 学习IO流
  • JS学习笔记——闭包
  • mysql innodb 索引使用指南
  • mysql中InnoDB引擎中页的概念
  • Octave 入门
  • quasar-framework cnodejs社区
  • React 快速上手 - 07 前端路由 react-router
  • Vim 折腾记
  • 深度学习入门:10门免费线上课程推荐
  • 使用 @font-face
  • 用简单代码看卷积组块发展
  • 怎么把视频里的音乐提取出来
  • 1.Ext JS 建立web开发工程
  • Python 之网络式编程
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • "无招胜有招"nbsp;史上最全的互…
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (solr系列:一)使用tomcat部署solr服务
  • (离散数学)逻辑连接词
  • (数据结构)顺序表的定义
  • (万字长文)Spring的核心知识尽揽其中
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转载)OpenStack Hacker养成指南
  • .Net core 6.0 升8.0
  • .net 调用php,php 调用.net com组件 --
  • .NET 反射的使用
  • .Net 应用中使用dot trace进行性能诊断