关于asp.net中datagrid的多列更新(c#)

loyern 2006-10-03 08:18:44
请各位大哥帮帮忙:
我在页面上放了一个datagrid,建立了模板列,在模板列的itemtemplete上放了textbox,我现在修改修改datagrid上textbox里面的数据,然后点button来更新到数据库,我该怎么更新到数据库?

代码

private void bt_save_Click(object sender, System.EventArgs e)
{
OleDbDataAdapter sda = new OleDbDataAdapter("select * from yczj_cyxx",Utility.Connection);

DataSet ds =new DataSet();

sda.TableMappings.Add("yczj_cyxx","yczj_cyxx");

try
{
sda.Fill(myDs,"yczj_cyxx");

}
catch
{
}
OleDbCommandBuilder odb= new OleDbCommandBuilder(sda);
int val = sda.Update(myDs,"yczj_cyxx");
ds.AcceptChanges();

GridBind();
}

这样也不会把修改的值更新到数据库?该怎么更新?
...全文
232 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
charles_y 2006-10-08
  • 打赏
  • 举报
回复
这个问题不是一句两句能说清楚的,关键是要理解原理。

DataTable 中的Row 的状态直接影响它会不会更新对应的数据库中的表的内容。
Jinglecat 2006-10-04
  • 打赏
  • 举报
回复

对于语句:

DataRow dr = myDs.Tables["yczj_cyxx"].Rows.Find(DataGrid1.DataKeys[di.ItemIndex]);

确保得到的 dr != null
loyern 2006-10-04
  • 打赏
  • 举报
回复
报错: dr["new_cbbz"] = "0";未引用到对象实例,就是dr["new_cbbz"] 未定义,new_cbbz我也通过select查询出来了的
superliu1122 2006-10-04
  • 打赏
  • 举报
回复
private void bt_save_Click(object sender, System.EventArgs e)
{
OleDbDataAdapter sda = new OleDbDataAdapter("select * from yczj_cyxx",Utility.Connection);

DataSet ds =new DataSet();

sda.TableMappings.Add("yczj_cyxx","yczj_cyxx");

try
{
sda.Fill(myDs,"yczj_cyxx");

}
catch
{
}



//遍历所有行
myDs.Tables["yczj_cyxx"].PrimaryKey = new DataColumn[]{myDs.Tables["yczj_cyxx"].Columns["cyhm"]};//设置表主键
foreach (DataGridItem di in DataGrid1.Items)

{

////不遍历datagrid中的 header or footer.

if (di.ItemType == ListItemType.Item || di.ItemType == ListItemType.AlternatingItem)

{
DataRow dr = myDs.Tables["yczj_cyxx"].Rows.Find(DataGrid1.DataKeys[((Label)DataGrid1.FindControl(Label11)).Text]);

if (((CheckBox)di.FindControl("CheckBox1")).Checked)
{


dr["new_cbbz"] = "0";


}

// 更新

dr["cxz"] = ((TextBox)di.FindControl("TextBox2")).Text;
dr["bg_yy"] = ((DropDownList)di.FindControl("ddl_wbyy")).SelectedValue;

//dr["TEL"] = ((TextBox)di.FindControl("TEL")).Text;

//ds.Tables["yczj_cyxx"].Rows.Add(dr);



//}
int val = sda.Update(myDs,"yczj_cyxx");
ds.AcceptChanges();




----------------------------



这段代码有什么问题
loyern 2006-10-03
  • 打赏
  • 举报
回复
要修改的是多行多列..
也就是对某两列的所有行进行修改
loyern 2006-10-03
  • 打赏
  • 举报
回复
happyhippy(寂静的虚空)
请你详细点,小第对这个一点不熟悉
happyhippy 2006-10-03
  • 打赏
  • 举报
回复
OleDbDataAdapter sda = new OleDbDataAdapter("select * from yczj_cyxx",Utility.Connection);
DataSet ds =new DataSet();
sda.TableMappings.Add("yczj_cyxx","yczj_cyxx");
sda.Fill(myDs,"yczj_cyxx");
你从数据库中取得数据,没有做任何修改又写回数据库了:
OleDbCommandBuilder odb= new OleDbCommandBuilder(sda);
int val = sda.Update(myDs,"yczj_cyxx");

既然是只修改了一个一条记录中的一个字段,直接写SQL语句就可以了,用DataSet/DataAdapter/CommandBuilder来更新的话,效率极慢。
loyern 2006-10-03
  • 打赏
  • 举报
回复
private void bt_save_Click(object sender, System.EventArgs e)
{
OleDbDataAdapter sda = new OleDbDataAdapter("select * from yczj_cyxx",Utility.Connection);

DataSet ds =new DataSet();

sda.TableMappings.Add("yczj_cyxx","yczj_cyxx");

try
{
sda.Fill(myDs,"yczj_cyxx");

}
catch
{
}



//遍历所有行
myDs.Tables["yczj_cyxx"].PrimaryKey = new DataColumn[]{myDs.Tables["yczj_cyxx"].Columns["cyhm"]};//设置表主键
foreach (DataGridItem di in DataGrid1.Items)

{

// //不遍历datagrid中的 header or footer.

if (di.ItemType == ListItemType.Item || di.ItemType == ListItemType.AlternatingItem)

{
DataRow dr = myDs.Tables["yczj_cyxx"].Rows.Find(DataGrid1.DataKeys[((Label)DataGrid1.FindControl(Label11)).Text]);

if (((CheckBox)di.FindControl("CheckBox1")).Checked)
{


dr["new_cbbz"] = "0";


}

// 更新

dr["cxz"] = ((TextBox)di.FindControl("TextBox2")).Text;
dr["bg_yy"] = ((DropDownList)di.FindControl("ddl_wbyy")).SelectedValue;

// dr["TEL"] = ((TextBox)di.FindControl("TEL")).Text;

// ds.Tables["yczj_cyxx"].Rows.Add(dr);



// }
int val = sda.Update(myDs,"yczj_cyxx");
ds.AcceptChanges();
xingzhiyun 2006-10-03
  • 打赏
  • 举报
回复
下面是一个ds修改后自动更新数据库的例子,以前学习时记的笔记,现在我也看不大懂了
System.Text.StringBuilder s;
SqlConnection Conn;
DataTable 表=new DataTable("员工");
SqlDataAdapter da;

Conn=new SqlConnection("server=192.168.1.1;uid=sa;pwd=gxl;database=test");
Conn.Open();
da=new SqlDataAdapter("select * from 员工",Conn);

#region 修改Command的设定
SqlCommand cmd=new SqlCommand();
cmd.Connection=Conn;
s=new System.Text.StringBuilder("");
s.Append("update 员工 set 姓名=@name,年龄=@age,工资=@wage where 姓名=@Original_name");
cmd.CommandText=s.ToString();
cmd.UpdatedRowSource=UpdateRowSource.Both;
cmd.Parameters.Add(new SqlParameter("@name",SqlDbType.VarChar,1024,"姓名"));
cmd.Parameters.Add(new SqlParameter("@age",SqlDbType.Int,1024,"年龄" ));
cmd.Parameters.Add(new SqlParameter("@wage",SqlDbType.Money,1024,"工资" ));
cmd.Parameters.Add(new SqlParameter("@Original_name", SqlDbType.NVarChar,1024, ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "姓名", DataRowVersion.Original, null));
//这里获取的是[姓名]的原始值,用来定位行
//这里要求[姓名]是主键
da.UpdateCommand=cmd;
#endregion

da.Fill(表);
表.Rows[0]["姓名"]="你好";
表.Rows[0]["年龄"]=21;
表.Rows[1]["年龄"]=22;

da.Update(表);//修改了2行,会执行update命令,数据库中会进行相应的改动.

Conn.Close();
Console.WriteLine("执行完毕");
loyern 2006-10-03
  • 打赏
  • 举报
回复
请你们给我看看出点主意,我做到这里就做不下去了..
20分,帮帮忙
在线等待....
qq:290362823
fphuang 2006-10-03
  • 打赏
  • 举报
回复
把itemtemplete中textbox的值取出来,然后用update 更新数据库
loyern 2006-10-03
  • 打赏
  • 举报
回复
我想更新整个datagrid中修改个的内容.
也就是datagrid中的两列内容
豌豆干 2006-10-03
  • 打赏
  • 举报
回复
一般都是真接用SQL的update语句来更新。你是怎么设计的,怎么用bt_save按钮来更新?
loyern 2006-10-03
  • 打赏
  • 举报
回复
有没有人在啊,请帮我一下,在线等待...

62,266

社区成员

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

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

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

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