欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#实现的Table的Merge,以及实现Table的Copy和Clone

程序员文章站 2023-11-02 14:38:04
C#实现的对两个Table进行Merge,两表必须存在至少一个公共栏位作为连接项,否则连接就失去了意义。如下是对两个table进行Merge的详细代码: private void button1_Click(object sender, EventArgs e)//Button点击触发事件 { #r ......

c#实现的对两个table进行merge,两表必须存在至少一个公共栏位作为连接项,否则连接就失去了意义。如下是对两个table进行merge的详细代码:

 private void button1_click(object sender, eventargs e)//button点击触发事件
        {
            #region  table的merge
            datatable dt = new datatable();

            datatable dt1 = new datatable();//创建table1
            dt1.columns.add("id", typeof(string));
            dt1.columns.add("name",typeof(string));
            dt1.columns.add("age", typeof(int));
            dt1.columns.add("sex", typeof(string));

            dt1.primarykey = new datacolumn[] { dt1.columns["id"]};
            for (int i = 0; i < 5; i++)
            {
                datarow dr = dt1.newrow();
                dr["id"] = "00" + i.tostring();
                dr["name"] = "00-" + i.tostring();
                dr["age"] = 15 + i;
                dr["sex"] = "m";
                dt1.rows.add(dr);

            }
            dt = dt1;

            datatable dt2 = new datatable();//创建table2
            dt2.columns.add("id", typeof(string));
            dt2.columns.add("name", typeof(string));
            dt2.columns.add("course",typeof(string));
            dt2.columns.add("score",typeof(int));

            dt2.primarykey = new datacolumn[] { dt2.columns["id"] };
            for (int i = 0; i < 5; i++)
            {
                datarow dr = dt2.newrow();
                dr["id"] = "00" + i.tostring();
                dr["name"] = "00-" + i.tostring();
                dr["course"] ="c#";
                dr["score"] = i + 80;
                dt2.rows.add(dr);
            }
            dt = dt2;
            dt1.merge(dt2);

            //copy
            var table1 = dt1.copy();//copy,复制表的结构以及数据
            //添加新的一行
            datarow dr1 = table1.newrow();
            dr1["id"] = "005";
            dr1["name"] = "00-5";
            dr1["age"] = 15;
            dr1["sex"] = "f";
            table1.rows.insertat(dr1,2);//表的指定位置插入新增加的一行     
              
            table1.columns.add(new datacolumn() { columnname = "memo", datatype = typeof(string) });//默認插入到最後一列
            table1.columns["memo"].setordinal(0);//把插入的列移动到第一行

            int memoindex = table1.columns.indexof("memo");//获取列的位置信息
            var iscontainname = table1.columns.contains("name");//判断table中是否存在某列

            list<string> columnsnamelist = new list<string>();//遍历获取table的所有列名
            foreach (datacolumn col in table1.columns)
            {
                columnsnamelist.add(col.columnname);
            }

            table1.columns.removeat(memoindex);//通过列名的索引进行移除
            table1.columns.removeat(2);//通过列名的索引进行移除

            table1.columns.remove("sex");//通过列名进行移除,建议使后者
           

            string[] name = new string[table1.rows.count];//方法一:对表中的数据进行遍历输出
            string[] id = new string[table1.rows.count];
            for (int i = 0; i < table1.rows.count; i++)
            {
                name[i] = table1.rows[i]["name"].tostring();
                id[i] = table1.rows[i]["id"].tostring();
            }
                      
            table1.clear();//清空表中的数据

            //clone
            var table2 = dt2.clone();//clone,复制表的结构、约束信息

            #endregion

        }