求SqlDataSource绑定GridView更新的例子

warden325 2011-02-10 09:45:47
之前绑定的数据源是DataTable,所有的插入更新删除操作都是在代码中生成sql脚本然后执行。
现在改成SqlDataSource后,直接提示需要UpdateCommand之类的。
看了programming asp.net中的例子,发现没看的很懂……
求一个比较通俗易懂且完整的例子。
注:数据库操作中的部分字段并非由用户输入,如修改用户名modify_id,修改时间modify_time,这些字段不知在UpdateCommand中如何体现。
...全文
315 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
tiger_yxq 2011-08-04
  • 打赏
  • 举报
回复
不错,学习了
warden325 2011-02-11
  • 打赏
  • 举报
回复
提示System.Data.OracleClient.OracleException: ORA-01036: 非法的变量名/编号
<asp:SqlDataSource ID="ResSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:connStrPTQRY_HXS %>" 
ProviderName="<%$ ConnectionStrings:connStrPTQRY_HXS.ProviderName %>"
UpdateCommand="update myTable set seq_id=@seq_id, modify_id=@modify_id, modify_time=sysdate, modify_content=@modify_content, status=0 where status <> 1 and seq_id=@original_seq_id and id=@id" >
<UpdateParameters>
<asp:Parameter Type="Decimal" Name="seq_id" />
<asp:Parameter Type="Decimal" Name="modify_id" />
<asp:Parameter Type="String" Name="modify_content" />
<asp:Parameter Type="Decimal" Name="original_seq_id" />
<asp:Parameter Type="Decimal" Name="id" />
</UpdateParameters>
</asp:SqlDataSource>

然后还是不知道怎么把e.OldValue中的seq_id代入original_seq_id中……以上设置完成后在RowUpdating中Trace.Write(e.OldValues.Count.ToString());依然是0……
warden325 2011-02-11
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 koukoujiayi 的回复:]

你根据9楼的设置,按“更新”时在RowUpdating事件中就可以获得更新前的旧值啊!
你先用最简单的方式试,通过后在改写成后台设置!
这应该没什么问题哦!
[/Quote]
谢谢+1,我试下>_<
warden325 2011-02-10
  • 打赏
  • 举报
回复
谢谢4楼的,但如果在rowupdating中要做一致性判断,要怎么获取未修改的值呢?e.OldValue不知道怎么用……
koukoujiayi 2011-02-10
  • 打赏
  • 举报
回复
你根据9楼的设置,按“更新”时在RowUpdating事件中就可以获得更新前的旧值啊!
你先用最简单的方式试,通过后在改写成后台设置!
这应该没什么问题哦!
Ryan20082009 2011-02-10
  • 打赏
  • 举报
回复
protected void GridView1_RowUpdating1(object sender, GridViewUpdateEventArgs e)
{
string c_id = GridView1.DataKeys[e.RowIndex].Value.ToString();

string c_user = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString();
string c_stardate = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString();
string c_costName = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[4].Controls[0])).Text.ToString();
string c_price = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[5].Controls[0])).Text.ToString();
string c_real = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[6].Controls[0])).Text.ToString();
string c_costMoney = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[7].Controls[0])).Text.ToString();
string c_userName = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[8].Controls[0])).Text.ToString();
string c_remarks = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[9].Controls[0])).Text.ToString();

string strSql = "update cost set c_user='" + c_user + "',c_stardate='" + c_stardate + "',c_costName='" + c_costName + "',c_price='" + c_price + "',c_real='" + c_real + "',c_costMoney='" + c_costMoney + "',c_userName='" + c_userName + "',c_remarks='" + c_remarks + "' where c_id='" + c_id + "'";
SqlConnection con = DB.GetCon();
con.Open();
SqlCommand cmd = new SqlCommand(strSql, con);
int i = cmd.ExecuteNonQuery();
if (i > 0)
{
RegisterStartupScript("", "<script>alert('修改成功')</script>");
}
else
{
RegisterStartupScript("", "<script>alert('修改失败')</script>");
}
cmd.Dispose();
con.Close();
GridView1.EditIndex = -1;
this.bind();
}
warden325 2011-02-10
  • 打赏
  • 举报
回复
刷不出来,ObjectDataSource是啥呢?
宜兴SEO 2011-02-10
  • 打赏
  • 举报
回复
推荐使用ObjectDataSource
wuyq11 2011-02-10
  • 打赏
  • 举报
回复
warden325 2011-02-10
  • 打赏
  • 举报
回复
额>_<我最后还是在代码执行时填充UpdateCommand,然后没设置UpdateParamar……e.OldValue里的值是UpdateParamer参数中的值咯?那如果没添加至UpdateParamer的话,意思就没办法获取这些旧值就是了?
想知道在RowUpdating这些接口中如何获得更新前的旧值>_<
飞啊子 2011-02-10
  • 打赏
  • 举报
回复
不用 这个 SqlDataSource
koukoujiayi 2011-02-10
  • 打赏
  • 举报
回复
设置SqlDataSource的UpdateCommand和UpdateParameters,
这些都可以自动生成!型如:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
ConnectionString="<%$ ConnectionStrings:...... %>" SelectCommand="SELECT 表.* FROM 表"

UpdateCommand="UPDATE 表 SET 字段1 = @字段1, 字段2 = @字段2, WHERE (id = @id)">
<UpdateParameters>
<asp:Parameter Name="字段1" />
<asp:Parameter Name="字段2" />
</UpdateParameters>
</asp:SqlDataSource>

如果符合以上的,就没什么问题!
warden325 2011-02-10
  • 打赏
  • 举报
回复
谢谢+1,能不能更详细点?我在rowupdating中输出e.oldvalues.count,居然是0……是不是SqlDataSource那边还要设置什么东西……
koukoujiayi 2011-02-10
  • 打赏
  • 举报
回复
e.OldValue和e.NewValues
只有使用了SqlDataSource或者ObjectDataSource才有效!
如:
    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
if (e.NewValues[0] != null & e.OldValues[0] != null)
{
if (e.NewValues[0].ToString() == e.OldValues[0].ToString())//0是指第一个位置编辑

e.Cancel = true;
}
}

110,544

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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