如何在DataTable中添加表、列字段?NewRow()【下】

前一节,我们提到了如何将TextBox的文本信息动态提交到GridView中,那么出现多个数据时候,或者知道已经存在了数据集,我们要求在里面添加别的字段,而这个字段是来自于其他数据表的资源,那么我们该如何去做呢?

InsertAt是用于在已经有数据的基础上在中间插入数据,如果你只是想添加,没有打算插队,请使用Add。

InsertAt是用来插入数据到数据集的指定位置的.

直接在位置参数上想插入最后一行,直接:DT.Rows.InsertAt(dr1, DT.Rows.Count-1);

这里我是想将下面的ds集中的数据放在ds_total中

思路:

(1)读取已有的ds集数据,这个可以从数据库中获取DataSet

(2)建立新的DataSet,也就是ds_total数据集,将ds获取的字段逐个填充到ds_total中

 DataTable dt = new DataTable();
            DataSet ds = null;    //详情细节信息
            DataSet ds_total = null;  //新的自定义表

 ds = B_PlanCheck.GetPlanDetail(ID);//这里是从数据库中得到已有的数据信息

 if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
            {
                 ds_total = new DataSet();
                 dt.Columns.Add("Year", typeof(string));
                dt.Columns.Add("Quarter", typeof(string));
                dt.Columns.Add("Department", typeof(string));
                dt.Columns.Add("Unit", typeof(string));
                dt.Columns.Add("Plan_Year", typeof(decimal));
                dt.Columns.Add("Anticipate", typeof(decimal));
                ds_total.Tables.Add(dt); //为新的表添加列字段


                for (int k = 0; k < ds.Tables[0].Rows.Count; k++)  //得到已有的ds数据集总行数
                {
                    DataRow dw = ds.Tables[0].Rows[k]; //已经获取到了存在的数据集的一行数据

                      //【知道有多少行了——k】dw是ds中的行数据
                        Plan_Year += Convert.ToDecimal(dw["Plan_Year"]);
                        Anticipate += Convert.ToDecimal(dw["Anticipate"]);
                        DataRow dr = ds_total.Tables[0].NewRow(); //新建行
                        dr.ItemArray = new object[] { 

                                dw["Year"],
                                dw["Quarter"],
                                dw["Department"],
                                dw["Unit"],
                                dw["Plan_Year"],
                                dw["Anticipate"],

                        };
                        ds_total.Tables[0].Rows.Add(dr); 

    //将ds的每一行数据逐步for循环存储添加到ds_total中
                        insert++; //表示ds_total中每增加一行数据,行数+

                        DataRow dr1 = ds_total.Tables[0].NewRow();
                        dr1.ItemArray = new object[]
                                dw["Year"],
                                dw["Quarter"],
                                dw["Project"],
                                Plan_Year,
                                Anticipate,
                        };
                        ds_total.Tables[0].Rows.InsertAt(dr1, k - insert + 1);

//将dr1添加到ds_total中,k - insert + 1表示前面添加一行的后一行
                        insert = 0;
                        Plan_Year = 0;
                        Anticipate = 0;
                    }

 ds_total.Tables[0].TableName = "dt"; //为ds_total 添加表名

    这里只是起到启发思路的作用,代码是不完整的。具体逻辑应用应该根据具体需求来设计


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值