关于更新数据,请大家帮忙,下午结帖!

zzs2002 2003-05-15 11:27:54
public void MyDg_update(object Sender,System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
Label1.Text=e.Item.Cells[1].Text;// !取不出值来!

SqlConnection con=new SqlConnection("server=zhangzs;database=test;uid=sa;pwd=");
string updatecmd="update staff_inf set no='00123' where no='00'";//注意
SqlCommand ucmd=new SqlCommand(updatecmd,con);
con.Open();
MyDg.DataSource=ucmd.ExecuteReader();
MyDg.DataBind();
MyDg.EditItemIndex=-1;
con.Close();


string str="select name as 姓名,no as 工号,xueli as 学历,zhuzhi as 住址,dep as 部门 ,bynf as 毕业年份 from staff_inf ";
con.Open();
SqlCommand cmd =new SqlCommand(str,con);
MyDg.DataSource=cmd.ExecuteReader();
MyDg.DataBind();
con.Close();
}

跟昨天的是一个,也就是DataGrid添加EditCommandColumn之后,当点"update"是,应该是sql server 中的数据更新!
上面是相应部分的代码,我遇到的问题是:
1.我并不能取出相应记录的,第2列的text值(我是用一个label测试的)
2.可以这样写string updatecmd="update staff_inf set no='00123' where no=Label.Text" 吗?

我在指定具体的no时是可以修改的,也就是代码里写的那样!
我哪写错了,请费心指导一下,谢谢!
...全文
26 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzs2002 2003-05-16
  • 打赏
  • 举报
回复
再次感谢大侠们,已经可以了!呵呵
tuzi98 2003-05-16
  • 打赏
  • 举报
回复
你的问题我遇到过,我也用这种方法才取到了值,你试试行不?
<asp:TemplateColumn HeaderText="地方">
<ItemTemplate>
<asp:Label text='<%#DataBinder.Eval(Container.DataItem,"name")%>' Runat="server">
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txt111" Text='<%#DataBinder.Eval(Container.DataItem,"name")%>' Runat="server"/>
</EditItemTemplate>
</asp:TemplateColumn>

private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
TextBox txt = (TextBox)e.Item.Cells[1].FindControl("txt111");
Response.Write("<script>alert(\""+txt.Text+"\")</script>");
}
zzs2002 2003-05-16
  • 打赏
  • 举报
回复
Knight94(愚翁) ( ) 你好!按你说的,提示的错误是
将截断字符串或二进制数据。
Knight94 2003-05-16
  • 打赏
  • 举报
回复
e.Item.Cells[2].Controls[0].ToString()
zhangzs8896 2003-05-16
  • 打赏
  • 举报
回复
怎么还没结?
tuzi98 2003-05-15
  • 打赏
  • 举报
回复
用这个试试
FindControl是System.Web.UI.Control的方法,可以根据子控件ID来查找子控件
比如:
假设DataGrid的某一列声明如下
<asp:TemplateColumn>
<ItemTemplate>
<asp:TextBox Runat="server" ID="txtID" Text='<%# DataBinder.Eval(Container.DataItem,"au_id") %>'>
</asp:TextBox>
</ItemTemplate>
</asp:TemplateColumn>
读取方法:
TextBox txt = (TextBox)DataGrid1.Items[1].FindControl("txtID");

记得加上这个
if(!Page.IsPostBack)
{

this.DataGrid1.DataSource = ds.Tables[0].DefaultView;
this.DataGrid1.DataBind();
}
zzs2002 2003-05-15
  • 打赏
  • 举报
回复
我可以在private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)里取到值,
但是不知道在自己定义的方法
public void MyDg_update(object Sender,System.Web.UI.WebControls.DataGridCommandEventArgs e) 里为什么就取不到!
根本就没反映呢。
大家帮帮忙1
visualcpu 2003-05-15
  • 打赏
  • 举报
回复
1.你设断点调试一下e.Item.Cells[1].Text;
2、Cells[0]是以0为基确的!
3、e.Item.FindControl["你的控件"]这样看看
zzs2002 2003-05-15
  • 打赏
  • 举报
回复
多谢关注!
按着dragon2006(笨龙) ( )的提示,可以在立即窗口取出值来了,只是现在的问题是:
string updatecmd="update staff_inf set name='" + e.Item.Cells[2].Controls[0].Text + "' where no='" + e.Item.Cells[1].Text + "'";
我这一句编译不过去,提示的错误是:System.Web.UI.WebControl并不包含对Text的定义。
(我需要的参数是e.Item.Cells[1].Text可以取到了,该列为只读。e.Item.Cells[2].Controls[0]是我需要更新的列,该列是可改写的)
也就是目前e.Item.Cells[2].Controls[0]不知道怎么带出他的Text!
我试着把e.Item.Cells[2].Controls[0]负给Text也是不行,同样的错误!
不好意思,还要麻烦大家!分数我有,解决了马上结帖
dragon2006 2003-05-15
  • 打赏
  • 举报
回复
不好意思,没看清,这样试试:
(TextBox)e.Item.Cells[numCols-1].Controls[0]).Text
Knight94 2003-05-15
  • 打赏
  • 举报
回复
你怎么触发MyDg_update?或者触发时,看看e到底是什么。
dragon2006 2003-05-15
  • 打赏
  • 举报
回复
很简单,你不是设定了对应的字段吗,这样取就可以了
this.dataset11.tables["表名"].row[e.item.itemindex].["列名"].tostring
zzs2002 2003-05-15
  • 打赏
  • 举报
回复
我想楼上朋友可能没看清楚,我用的不是 TemplateColumn,而是EditCommandColumn,也就是里面提供的(编辑,更新,取消),别的可以实现了,就是在"更新"的时候,我取不到特定记录的第二列的值,因为需要用这个列的值做一个条件的。目前是如果指定条件为一个特定的值,是能够更新SQL里的数据的。记得以前用LinkButton的时候是可以用e.Item.Cells[1].Text取到DataGrid的第二列的,我不知道问题出在什么地方了,请大侠们指点!
(我的部分代码在上面)
zzs2002 2003-05-15
  • 打赏
  • 举报
回复
去试试先!多谢了

110,535

社区成员

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

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

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