GridView多行填写问题

gdlpc 2007-11-27 03:31:25
各位大师:你们好,请问:
希望把多个学生的成绩都录完,然后统一提交保存。

  做法是,先用SQL语句生成了学生、课程、成绩的对应表如下:

姓名  成绩(对应模板列,里面放个TextBox)
李一
张二
林三
邓四
...



  成绩因为还没有输入,生成的都是空值。
GridView绑定到这个对应表上,成绩列使用模板列,里面放个TextBox就可以了。
保存时,我一般采用DataSet保存。即将对应表读入DataSet,对GridView中的每一行(foreach循环),取出输入的成绩,填入DataSet。所有行都填完后,调用一下SqlDataAdapter的Update统一更新到数据库。
现问题是具体代码如何写?多谢!
...全文
275 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdlpc 2008-01-30
  • 打赏
  • 举报
回复
请帮帮
gdlpc 2007-12-28
  • 打赏
  • 举报
回复
我还是不会写这一句:
cmd.CommandText = string.Format("update czhchj set 姓名={0},语文={1}", gvr.Cells[0].Text, ((TextBox)gvr.Cells[1].Controls[0]).Text);
gdlpc 2007-12-27
  • 打赏
  • 举报
回复
我这么写这一句
cmd.CommandText = string.Format("update czhchj set 姓名={0},语文={1}", gvr.Cells[0].Text, ((TextBox)gvr.Cells[1].Controls[0]).Text);
它提示如下:
用户代码未处理 System.ArgumentOutOfRangeException
Message="指定的参数已超出有效值的范围。\r\n参数名: index"
Source="System.Web"
ParamName="index"
StackTrace:
在 System.Web.UI.ControlCollection.get_Item(Int32 index)
在 czhchj.Button2_Click(Object sender, EventArgs e) 位置 f:\VS_test_1000\czhchj.aspx.cs:行号 43
在 System.Web.UI.WebControls.Button.OnClick(EventArgs e)
在 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
在 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

请问这一句实际如何写才能正确?多谢!
gdlpc 2007-12-19
  • 打赏
  • 举报
回复
调试时说
cmd.CommandText = string.Format("update table set ziduan1={0},ziduan2={1}", gvr.Cells[0].Text, ((TextBox)gvr.Cells[1].Controls[0]).Text);
这行指定的参数已超出有效值的范围
qq22345111 2007-11-28
  • 打赏
  • 举报
回复
楼上正解
myh790420 2007-11-28
  • 打赏
  • 举报
回复
^_^,这个你还可以使用DataTable的AcceptChanges()方法
代码如下:
GridView gv = new GridView(); //这行不要就是你的GridView
DataTable dt = new DataTable();
SqlDataAdapter sqlda = new SqlDataAdapter("selectcommandtext", "selectconnectstring");
sqlda.Fill(dt);
foreach (GridViewRow gvr in gv.Rows)
{
DataRow dr = dt.NewRow();
dr[""] = gvr.Cells[0].Text;
dr[""] = ((TextBox)dgi.Cell[1].Controls[0]).Text;
dt.Rows.Add(dr);
}
sqlda.UpdateCommand = "更新命令";
sqlda.Update(dt);
dt.AcceptChanges();
或者
根本就不用把所有的数据先存到表中直接循环DataGrid的行插入数据库中
GridView gv = new GridView();//这个是你的gridview不要
SqlConnection sqlcn = new SqlConnection("连接字符串");
SqlCommand cmd = new SqlCommand();
sqlcn.Open();
foreach (GridViewRow gvr in gv.Rows)
{
//命令字符串的设置更新就用更新字符串插入就用插入字符串
cmd.CommandText = string.Format("update table set ziduan1={0},ziduan2={1}", gvr.Cells[0].Text, ((TextBox)dgi.Cell[1].Controls[0]).Text);
cmd.ExecuteNonQuery();

}
if (sqlcn.State != ConnectionState.Closed)
{
sqlcn.Close();
}
Eray 2007-11-28
  • 打赏
  • 举报
回复
楼上适用
关键代码:
1 所有数据先存到DataTable里。
2 foreach DataGrid的每一行。并存到DataTable里。
3 foreach DataTable的DataRow,然后写到数据库里。
popule_daisy 2007-11-27
  • 打赏
  • 举报
回复
建议楼主用一个DataTable保存DataGrid中的值。
先实例化一个DataTable dt.然后添加相对应的列,然后有foreach循环添加数据。foreach(DataGrigItem dgi in this.DataGrid1.Items) in 后根据楼主的DataGrid 名而定。
在foreach循环中实例化一个DataRow dr=new DataRow(new object[]{'李一 ','100'});绿色部分根据DataGrid的不同添加
当然foreach要根据DataGrid来
实例 foreach(DataGrigItem dgi in this.DataGrid1.Items)
{
DataRow dr=new DataRow();
dr[0]=dgi.Cell[0].Text;
dr[1]=((TextBox)dgi.Cell[1].Controls[0]).Text;//因为用的是TextBox
dt.Rows.Add(dr);
}

楼主再根据实际情况修改适当的地方应该就OK拉

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧