C#中DataTable的一些常用操作

Wesley13
• 阅读 473
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();
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
GitHub 上有哪些适合新手跟进的优质项目?
!(https://oscimg.oschina.net/oscnet/011f28e3bc332010e1442e6c00ed344805d.jpg)点击上方“迈微电子研发社”,选择“星标★”公众号重磅干货,第一时间送达!(https://oscimg.oschina.net/oscnet/cd44ba75f
Wesley13 Wesley13
2年前
asp.net中使用Global.asax文件中添加应用出错代码,写入系统日志文件或数据库
voidApplication_Error(objectsender,EventArgse){//在出现未处理的错误时运行的代码ExceptionobjErrServer.GetLastError().GetBaseException();//获取错误
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
PHP二维数组按某个键值排序
二维数组:$arrarray('name''小坏龙','age'28),array('name''小坏龙2','age'14),arr
Easter79 Easter79
2年前
Task.Factory.StartNew多线程中将数值实时传递到UI显示
privatevoidbutton1_Click(objectsender,EventArgse){Taskt1Task.Factory.StartNew(()k1());Taskt2Task.Factory.StartNe
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这