热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#中DataTable的几种常用用法

//①Create a DataTable

//①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("")));
            System.IO.TextReader trSchema 
= new System.IO.StringReader(xml.Substring(xml.IndexOf("")));
            DataTable dtReturn 
= new DataTable();
            dtReturn.ReadXmlSchema(trSchema);
            dtReturn.ReadXml(trDataTable);
            
return dtReturn;
        }

【追加】排序的好方法
 

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

 

有时往表中插入行的时候会出现错误:该行已经属于另一个表

解决办法:dt.Rows.Add(dr.ItemArray);


推荐阅读
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了如何将CIM_DateTime解析为.Net DateTime,并分享了解析过程中可能遇到的问题和解决方法。通过使用DateTime.ParseExact方法和适当的格式字符串,可以成功解析CIM_DateTime字符串。同时还提供了关于WMI和字符串格式的相关信息。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • C# 7.0 新特性:基于Tuple的“多”返回值方法
    本文介绍了C# 7.0中基于Tuple的“多”返回值方法的使用。通过对C# 6.0及更早版本的做法进行回顾,提出了问题:如何使一个方法可返回多个返回值。然后详细介绍了C# 7.0中使用Tuple的写法,并给出了示例代码。最后,总结了该新特性的优点。 ... [详细]
author-avatar
手机用户2502876173
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有