前一节,我们提到了如何将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 添加表名
这里只是起到启发思路的作用,代码是不完整的。具体逻辑应用应该根据具体需求来设计