CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  ASP.NET

大虾请进:GridView取值老问题,解决不了!

楼主widow(小吴)2006-12-04 16:45:54 在 .NET技术 / ASP.NET 提问

我的代码如下:  
  public   partial   class   _Default   :   System.Web.UI.Page    
  {  
          OleDbConnection   conn   =   new   OleDbConnection(ConfigurationSettings.AppSettings["conStr"]   +   System.Web.HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings["dbName"]));  
          DataSet   ds   =   new   DataSet();    
   
          public   void   dataBd()  
          {  
                  OleDbDataAdapter   da   =   new   OleDbDataAdapter("select   *   from   信息表",conn);  
                  conn.Open();  
                  da.Fill(ds,"信息表");  
                  conn.Close();  
                  GridView1.DataSource   =   ds.Tables["信息表"];  
                  GridView1.DataBind();  
          }  
          protected   void   Page_Load(object   sender,   EventArgs   e)  
          {  
                  if   (!IsPostBack)//此处要与不要都试过,未果  
                  {  
                          dataBd();  
                  }  
          }  
   
          protected   void   GridView1_RowCommand(object   sender,   GridViewCommandEventArgs   e)  
          {  
                  string   sqlStr   =   "update   信息表   set   姓名='"   +   GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text   +   "'   where   ID="   +   GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();  
                  Button1.Text   =   sqlStr;  
                  if   (e.CommandName   ==   "Edit")  
                  {  
                            GridView1.EditIndex   =   Convert.ToInt32(e.CommandArgument);  
                          dataBd();  
                  }  
                  if   (e.CommandName   ==   "Update")  
                  {  
                          OleDbCommand   comUd   =   new   OleDbCommand(sqlStr,   conn);  
                          conn.Open();  
                          comUd.ExecuteNonQuery();  
                          conn.Close();  
                          GridView1.EditIndex   =   -1;  
                          dataBd();  
   
                  }  
          }  
  }  
   
  总是将空值更新进数据库,每次都取不到值,已经困了我快一星期了,请指教!GridView我用自动绑定字段。 问题点数:100、回复次数:21Top

1 楼HJS1820(努力成為高手)回复于 2006-12-04 16:54:19 得分 2

幫頂  
  結帖時接點分...  
   
  只用過datagridTop

2 楼xiahouwen(武眉博<活靶子.NET>)回复于 2006-12-04 16:57:07 得分 3

断点   察看   GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text   什么值Top

3 楼widow(小吴)回复于 2006-12-04 17:07:08 得分 0

断点   察看   GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text    
  //////////////////////////////  
  我看了,退出编辑前是空值!请帮帮我!Top

4 楼widow(小吴)回复于 2006-12-04 17:10:19 得分 0

断点   察看   GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Text  
  ---------------------------------------------------------  
  点击编辑时取出的是原值,但点击更新时是空值!Top

5 楼xyh2002(凌)回复于 2006-12-04 17:27:22 得分 5

写到RowEditing事件里面试试是否可以,例如下面这样  
   
  protected   void   GridView1_RowEditing(   object   sender,   GridViewEditEventArgs   e   )  
          {  
                  int   index   =   e.NewEditIndex;  
                  GridViewRow   row   =   GridView1.Rows[   index   ];  
                  string   jobID   =   Server.HtmlDecode(   row.Cells[   3   ].Text   );  
   
                          }Top

6 楼widow(小吴)回复于 2006-12-04 18:15:25 得分 0

to   xyh2002(凌)  
          还是取不出来,原来的单元格有值,不做任何改动,只要单击编辑,然后单击更新,值就没有了,看来问题肯定是sql语句的执行发生在页面刷新之后,页面一刷新,原来修改的值就没有了,于是sql就提交了空值到数据库。这到底怎样解决呢?Top

7 楼wlb854(不倒翁)回复于 2006-12-04 18:22:19 得分 3

if   (!IsPostBack)  
                  {  
                          dataBd();  
                  }  
  这可定要的Top

8 楼widow(小吴)回复于 2006-12-04 18:27:35 得分 0

to   wlb854(不倒翁)  
          是过了,要与不要都不行。  
   
  各位大虾能不能在你们的机子上帮我调一下,我快要疯了!十分感激!Top

9 楼Snowdust(雪尘)回复于 2006-12-04 19:50:25 得分 78

protected   void   GridView1_RowCommand(object   sender,   GridViewCommandEventArgs   e)  
  {  
  if   (e.CommandName   ==   "Edit")  
  {  
  GridView1.EditIndex   =   Convert.ToInt32(e.CommandArgument);  
  dataBd();  
  }  
  if   (e.CommandName   ==   "Update")  
  {  
  string   sqlStr   =   "update   信息表   set   姓名='"   +   ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text   +   "'   where   ID="   +   GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();//问题出在这里  
  Button1.Text   =   sqlStr;  
  OleDbCommand   comUd   =   new   OleDbCommand(sqlStr,   conn);  
  conn.Open();  
  comUd.ExecuteNonQuery();  
  conn.Close();  
  GridView1.EditIndex   =   -1;  
  dataBd();  
  }  
  }Top

10 楼charles_y(每天上网一小时)回复于 2006-12-04 19:54:20 得分 5

没用过gridview,帮不了你  
   
  不过把e.CommandArgument   都改成   e.RowIndex   看看呢  
  还有,似乎if   (e.CommandName   ==   "Edit")  
                  {  
                            GridView1.EditIndex   =   Convert.ToInt32(e.CommandArgument);  
                          dataBd();  
                  }  
  里面需要dataBd()吗?这不是把gridview还原了吗?  
  Top

11 楼wengnet(西门吹雪)回复于 2006-12-04 20:00:44 得分 2

你在EDIT模板里面绑定了吗,如果我猜的没有错,应该是没有。Top

12 楼widow(小吴)回复于 2006-12-04 20:13:58 得分 0

to   charles_y(每天上网一小时)  
  在该事件中没有e.RowIndex,因为都是区当前行的位置,应该不影响;不用dataBd()绑定的话必须得点两次按钮才能激活编辑事件。  
  谢谢您能帮帮解答,请继续关注!  
  -----------------------------------------  
  to   wengnet(西门吹雪)  
  我是选择自动填充字段的,这样会有影响吗?请明示!  
  Top

13 楼widow(小吴)回复于 2006-12-04 20:22:20 得分 0

按照Snowdust(雪尘)的提示代码,问题已经解决,我要用10分钟做一下多字段测试,10分钟后结贴。  
  Top

14 楼widow(小吴)回复于 2006-12-04 20:35:31 得分 0

to   Snowdust(雪尘)    
  -----------------------  
  我将您的提示改为两个字段时(如下)  
  sqlStr   =   "update   信息表   set   姓名='"   +   ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text   +   "'   and   学号='"   +   ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text+"'   where   ID="   +   GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();  
  --------------  
  就出现姓名字段更新为随机的0或-1,而不是我输入的值,这是怎么回事?请您继续帮我!  
   
  请各位大虾继续关注!Top

15 楼Snowdust(雪尘)回复于 2006-12-04 20:45:28 得分 0

sqlStr   =   "update   信息表   set   姓名='"   +   ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text   +   "',   学号='"   +   ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text+"'   where   ID="   +   GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();  
   
  你的SQL语句有问题啊!!!!!!!!!!Top

16 楼shumark()回复于 2006-12-04 20:48:15 得分 2

不用自动绑定....手工加还好些...  
   
  想怎么滴就怎么滴~Top

17 楼widow(小吴)回复于 2006-12-04 20:54:00 得分 0

to   Snowdust(雪尘):  
        对不起,刚才写错了,改正后还是老样子!以下是我的sql语句,为了排除中文影响,我把表名和字段改为拼音:  
    sqlStr   =   "update   xxb   set   xh='"   +   ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text   +   "'   and   xm='"   +   ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text   +   "'   where   ID="   +   GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();  
  Top

18 楼widow(小吴)回复于 2006-12-04 20:56:25 得分 0

我用label显示了解析后的sql语句,是正确的,而且执行过程中也没有报错,可就是得不到预期结果Top

19 楼Snowdust(雪尘)回复于 2006-12-04 21:01:21 得分 0

那就怪了,我试下来没问题,你再看看是不是别的什么地方有问题。Top

20 楼widow(小吴)回复于 2006-12-04 21:05:21 得分 0

Snowdust(雪尘)   ,非常感谢您,我在试一下,待会儿结帐!Top

21 楼widow(小吴)回复于 2006-12-04 21:22:27 得分 0

to   everyone   :   问题已解决  
  sql语句写错了,应该是  
  ------------  
  string   sqlStr   =   "update   xxb   set   xh='"   +   ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[2].Controls[0]).Text   +   "'   ,   xm='"   +   ((TextBox)GridView1.Rows[Convert.ToInt32(e.CommandArgument)].Cells[3].Controls[0]).Text   +   "'   where   ID="   +   GridView1.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();  
  ------------  
  不知道为始末没报错!  
   
  感谢Snowdust(雪尘)   、感谢wengnet(西门吹雪),感谢所有参与的人!真希望有一天,我也能有一颗红星星!  
  ------------  
  结帐!Top

相关问题

关键词

得分解答快速导航

  • 帖主:widow
  • HJS1820
  • xiahouwen
  • xyh2002
  • wlb854
  • Snowdust
  • charles_y
  • wengnet
  • shumark

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo