关于asp.net中datagrid的多列更新(c#)
请各位大哥帮帮忙:
我在页面上放了一个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();
}
这样也不会把修改的值更新到数据库?该怎么更新?
问题点数:20、回复次数:14Top
1 楼loyern()回复于 2006-10-03 20:34:30 得分 0
有没有人在啊,请帮我一下,在线等待...Top
2 楼zhangyu028(听天之音)回复于 2006-10-03 22:31:33 得分 0
一般都是真接用SQL的update语句来更新。你是怎么设计的,怎么用bt_save按钮来更新?Top
3 楼loyern()回复于 2006-10-03 22:33:10 得分 0
我想更新整个datagrid中修改个的内容.
也就是datagrid中的两列内容Top
4 楼fphuang(人在哈尔滨·四月)回复于 2006-10-03 22:36:19 得分 0
把itemtemplete中textbox的值取出来,然后用update 更新数据库Top
5 楼loyern()回复于 2006-10-03 22:36:44 得分 0
请你们给我看看出点主意,我做到这里就做不下去了..
20分,帮帮忙
在线等待....
qq:290362823Top
6 楼xingzhiyun(八宝齐)回复于 2006-10-03 22:38:38 得分 0
下面是一个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("执行完毕");
Top
7 楼loyern()回复于 2006-10-03 22:39:56 得分 0
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();Top
8 楼happyhippy(Silent Void)回复于 2006-10-03 22:44:47 得分 0
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来更新的话,效率极慢。Top
9 楼loyern()回复于 2006-10-03 22:50:35 得分 0
happyhippy(寂静的虚空)
请你详细点,小第对这个一点不熟悉Top
10 楼loyern()回复于 2006-10-03 22:52:06 得分 0
要修改的是多行多列..
也就是对某两列的所有行进行修改Top
11 楼superliu1122(SuperTNT)回复于 2006-10-04 06:30:27 得分 0
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();
----------------------------
这段代码有什么问题Top
12 楼loyern()回复于 2006-10-04 06:58:40 得分 0
报错: dr["new_cbbz"] = "0";未引用到对象实例,就是dr["new_cbbz"] 未定义,new_cbbz我也通过select查询出来了的
Top
13 楼Jinglecat(晓风残月)回复于 2006-10-04 09:49:23 得分 0
对于语句:
DataRow dr = myDs.Tables["yczj_cyxx"].Rows.Find(DataGrid1.DataKeys[di.ItemIndex]);
确保得到的 dr != nullTop
14 楼charles_y(每天上网一小时)回复于 2006-10-08 12:20:27 得分 0
这个问题不是一句两句能说清楚的,关键是要理解原理。
DataTable 中的Row 的状态直接影响它会不会更新对应的数据库中的表的内容。Top




