情景说明:
假设我是一个文件报告提交者,我想一次性提交需要交纳的文档信息。因此我的做法是,将一个个文本信息通过TextBox控件添加显示在GridView中,然后再将其保存在对应的数据库中。但是,我必须保证我这一次提交的数据,我作为提交者在第一个数据表中,仅有一条记录,而详细的文件信息在第二个表中显示,则有多少条数据就有多少记录,前提是保证其记录的ID是相同的,表明这是我一次性提交的。方法:第一个提交信息者表的主键ID作为第二个文件详细信息表的多个数据记录的ID_FL号。这样就形成一对多的格局。每次查询文件记录就查询保存的ID_Fl号显示,或者您也可以两个表格都保存提交文件信息的时间,这样通过时间也可以查询到你同一次提交的信息了。具体方法如下:
【1】数据库的设置,如图:
【2】至于将TextBox控件的文字保存显示到GridView中,前一章节已经说过了,这里不再重复了。
【3】保存提交到数据库中
protected void btnup_Click(object sender, EventArgs e)
{
decimal id_draftman = Convert.ToDecimal(Session["ID"].ToString()); //提交者的ID号
decimal id_main = B_FileListMake.AddFileList((DataSet)ViewState["Gv"], id_draftman); //获取fileList主表id号
if(id_main>0)
{
msg.AjaxResponeSrcipt(UpdatePanel1, this.GetType(), "上报成功!");
((DataSet)ViewState["Gv"]).Tables[0].Rows.Clear(); //及时清空记录,以防重复保存
GV_bind(); //重新数据绑定显示,已经为null,因此不会显示GridView了
}
else
{
msg.AjaxResponeSrcipt(UpdatePanel1, this.GetType(), "上报失败!");
}
}
【4】调用函数方法保存数据库
public decimal AddFileList(DataSet ds, decimal id_draftman)
{
if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
{
//Entity.TB_FileList EModel = new Entity.TB_FileList();
EModel.Id_DraftMan = id_draftman;
EModel.Time_Draft = DateTime.Now;
EModel.State = "0";
decimal id = S_TB_FileList.Add(EModel);
//这个id返回的是FileList数据表的ID【执行object obj = cmd.ExecuteScalar();返回第一行第一列数据】
if (id > 0)
{
E_TB_ParticularFileList.Id_FL = id;
//【注意】要求同一个ID号,因此这个语句不会放在foreach语句中
//将这个FileList这个ID保存在ParticularFileList的Id_FL中,
//允许有两条记录以上的,则会出现在ParticularFileList有两个相同的Id_FL号
foreach (DataRow dr in ds.Tables[0].Rows)
//将GridView多个数据保存在ParticularFileList表中
//该ds相当于调用(DataSet)ViewState["Gv"],包括了GridView中的所有行列
//因此可以循环保存在ParticularFileList表中
{
E_TB_ParticularFileList.FileNum = dr["FileNum"].ToString();
E_TB_ParticularFileList.Num_File = dr["Num_File"].ToString();
E_TB_ParticularFileList.Topic = dr["Topic"].ToString();
E_TB_ParticularFileList.Pages = Convert.ToDecimal(dr["Pages"].ToString());
E_TB_ParticularFileList.DutyMan = dr["DutyMan"].ToString();
E_TB_ParticularFileList.Rmark = dr["Rmark"].ToString();
E_TB_ParticularFileList.Time = DateTime.Now;
S_TB_ParticularFileList.Add(E_TB_ParticularFileList);//这句保存Add()一定要写在foreach中进行循环保存
}
return id;
}
else return -1;
}
else return -1;
}