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

为什么我总是无法取得一个DataGrid中的可编辑框中的新值?

楼主ynduanlian(进一步海阔天高,退一步粉身碎骨)2005-02-01 14:52:19 在 .NET技术 / ASP.NET 提问

我用了下面一个DataGrid,想编辑里面的“时间”一项,点击“修改”后,时间项变成可编辑的,但当我改了Textbox中的值后,点“保存”,却发现取出的总是原来没改过的值,请问是哪不对啊?  
   
   
  <%@   Import   Namespace="System.Data"   %>  
  <%@   Import   Namespace="System.Data.OleDb"   %>  
  <Script   language="C#"   runat="server">  
  ……  
   
  public   void   BindData(){  
  ……  
  }  
   
  public   void   DBItemEdit(Object   sender,DataGridCommandEventArgs   e){  
          LC_GZ.EditItemIndex   =   e.Item.ItemIndex;  
          BindData();  
  }  
   
  public   void   DBItemCancel(Object   sender,DataGridCommandEventArgs   e){  
          LC_GZ.EditItemIndex   =   -   1;  
  BindData();  
  }  
   
  public   void   DBItemUpdate(Object   sender,DataGridCommandEventArgs   e){  
          string   StrGZID=e.Item.Cells[0].Text;  
          TextBox   NTime=(TextBox)(e.Item.Cells[3].Controls[0]);  
  ……就是这里,为什么NTime.Text总是原来那个值?  
  Response.Write(NTime.Text);  
          OleDbConnection   Cn=new   OleDbConnection(DataConnectionString);  
  OleDbCommand   Cmd=new   OleDbCommand();  
  Cmd.Connection=Cn;  
  Cmd.Connection.Open();  
  Cmd.CommandType=CommandType.StoredProcedure;  
  Cmd.CommandText="LC_MOD_Single";       //(@P_GCCODE,@P_GZID,@P_NEW_TIME,@P_Op_Name)";  
  Cmd.Parameters.Add("@P_GCCODE",StrGccode);  
  Cmd.Parameters.Add("@P_GZID",StrGZID);  
  Cmd.Parameters.Add("@P_NEW_TIME",NTime.Text);  
  Cmd.Parameters.Add("@P_Op_Name","");  
  Cmd.ExecuteNonQuery();  
  LC_GZ.EditItemIndex=-1;  
  BindData();  
  Cn.Close();  
  }  
  </Script>  
  <html>  
  <head>  
  </head>  
  <body>  
  <form   runat="server">  
  <table>  
  <asp:DataGrid   ID="LC_GZ"   Runat="server"   AllowPaging=False   CellSpacing=0   CellPadding=5   AutoGenerateColumns=false   Font-Size=13px    
  OnEditCommand="DBItemEdit"   OnCancelCommand="DBItemCancel"     OnUpdateCommand="DBItemUpdate">  
  <EditItemStyle   BackColor="#FFFFEE">  
  </EditItemStyle>  
  <columns>  
  <asp:BoundColumn   HeaderText="GZID"   DataField="GZID"   visible=false   ReadOnly   />  
  <asp:BoundColumn   HeaderText="工作"   DataField="GZName"     ReadOnly/>  
  <asp:BoundColumn   HeaderText="操作"   DataField="DispName"   ReadOnly   />  
  <asp:BoundColumn   HeaderText="时间"   DataField="E_Time"   />  
  <asp:TemplateColumn>  
  <ItemTemplate><img   src='../images/fx2.gif'   height=25></ItemTemplate>  
  </asp:TemplateColumn>  
  <asp:EditCommandColumn   EditText="修改"   CancelText="取消"   UpdateText="保存"   ItemStyle-Wrap="false"   HeaderText="修改"   HeaderStyle-Wrap="false"/>  
  </Columns>  
  </asp:DataGrid>  
  </form>  
  </body>  
  </html>  
  问题点数:20、回复次数:9Top

1 楼AllenTing(今天你GC了吗???)回复于 2005-02-01 15:02:02 得分 6

问题在这:  
  <asp:BoundColumn   HeaderText="时间"   DataField="E_Time"   />  
  你定义的是boudcolumn,改用templatecolumn:  
  <asp:templatecolumn>  
      <itemTemplate>  
        ...    
      </itemTempate>  
      <editTemplate>  
        <asp:textbox     id="name"   text=".."   runat="Server"   />  
   
      </editTemplate>  
   
  </asp:templatecolumn>Top

2 楼ynduanlian(进一步海阔天高,退一步粉身碎骨)回复于 2005-02-01 15:08:29 得分 0

不是吧,我以前也用Bindcolumn,能改啊?Top

3 楼AllenTing(今天你GC了吗???)回复于 2005-02-01 15:12:35 得分 0

那你试试吧Top

4 楼wanghaijun240(WHJ)回复于 2005-02-01 15:13:28 得分 7

PageLode事件里面这样调用BindData()方法:  
   
  if(!Page.IsPostback)  
  {  
          BindData();  
  }Top

5 楼spland(spland)回复于 2005-02-01 15:14:36 得分 1

AllenTing(我爱吃醋)   说的没错  
  修改的内容用templatecolumn,你试一下就知道了Top

6 楼ynduanlian(进一步海阔天高,退一步粉身碎骨)回复于 2005-02-01 15:20:28 得分 0

贴出全部代码:  
  <%@   Import   Namespace="System.Data"   %>  
  <%@   Import   Namespace="System.Data.OleDb"   %>  
  <Script   language="C#"   runat="server">  
  public   string   StrGccode;  
  public   string   DataConnectionString="Provider=MSDAORA;Data   Source=kmtdb4;User   ID=kmtdb4;Password=kmtdb4";  
   
  public   void   Page_Load(Object   sender,EventArgs   e){  
      StrGccode=Request.QueryString["GCCODE"];  
      BindData();  
  }  
   
  public   void   BindData(){  
      StringBuilder   Sb=new   StringBuilder();  
      Sb.Append("select   LC_PRJGZ.GZID,LC_PRJGZ.GZNAME,LC_PRJRECORD.B_TIME,LC_PRJRECORD.E_TIME,PRJ_XTUSER.UserID   ,PRJ_XTUSER.USERNAME   ,PRJ_XTUSER.dispname,LC_MOD_PRJRECORD_BAK.E_TIME   ");  
      Sb.Append("   from   LC_PRJGZ,LC_PRJRECORD,PRJ_XTUSER,LC_MOD_PRJRECord_bak   ");  
      Sb.Append("   where     LC_PRJRECORD.USERID=PRJ_XTUSER.USERID   AND   LC_PRJGZ.GZID=LC_PRJRECORD.GZID   And   lc_prjrecord.gccode=lc_mod_prjrecord_bak.gccode   ");  
      Sb.Append("   And   lc_prjrecord.gzid=lc_mod_prjrecord_bak.gzid");  
      Sb.Append("   and   LC_PRJRECORD.gccode=");  
      Sb.Append(StrGccode);  
      Sb.Append("   order   by   LC_MOD_PRJRECORD_BAK.E_TIME   ");  
      string   StrSql=Sb.ToString();  
       
      DataSet   Ds=new   DataSet();  
      OleDbConnection   Cn=new   OleDbConnection(DataConnectionString);  
      OleDbDataAdapter   Da=new   OleDbDataAdapter(StrSql,Cn);  
      Da.Fill(Ds,"GZ");  
       
      LC_GZ.DataSource=Ds;  
      LC_GZ.DataMember="GZ";  
      LC_GZ.DataBind();  
  }  
   
  public   void   DBItemEdit(Object   sender,DataGridCommandEventArgs   e){  
          LC_GZ.EditItemIndex   =   e.Item.ItemIndex;  
          BindData();  
  }  
   
  public   void   DBItemCancel(Object   sender,DataGridCommandEventArgs   e){  
          LC_GZ.EditItemIndex   =   -   1;  
  BindData();  
  }  
   
  public   void   DBItemUpdate(Object   sender,DataGridCommandEventArgs   e){  
          string   StrGZID=e.Item.Cells[0].Text;  
          TextBox   NTime=(TextBox)(e.Item.Cells[3].Controls[0]);  
  Response.Write(NTime.Text);  
          OleDbConnection   Cn=new   OleDbConnection(DataConnectionString);  
  OleDbCommand   Cmd=new   OleDbCommand();  
  Cmd.Connection=Cn;  
  Cmd.Connection.Open();  
  Cmd.CommandType=CommandType.StoredProcedure;  
  Cmd.CommandText="LC_MOD_Single";       //(@P_GCCODE,@P_GZID,@P_NEW_TIME,@P_Op_Name)";  
  Cmd.Parameters.Add("@P_GCCODE",StrGccode);  
  Cmd.Parameters.Add("@P_GZID",StrGZID);  
  Cmd.Parameters.Add("@P_NEW_TIME",NTime.Text);  
  Cmd.Parameters.Add("@P_Op_Name","");  
  Cmd.ExecuteNonQuery();  
  LC_GZ.EditItemIndex=-1;  
  BindData();  
  Cn.Close();  
  }  
  </Script>  
  <html>  
  <head>  
  </head>  
  <body>  
  <form   runat="server">  
  <table>  
  <asp:DataGrid   ID="LC_GZ"   Runat="server"   AllowPaging=False   CellSpacing=0   CellPadding=5   AutoGenerateColumns=false   Font-Size=13px    
  OnEditCommand="DBItemEdit"   OnCancelCommand="DBItemCancel"     OnUpdateCommand="DBItemUpdate">  
  <EditItemStyle   BackColor="#FFFFEE">  
  </EditItemStyle>  
  <columns>  
  <asp:BoundColumn   HeaderText="GZID"   DataField="GZID"   visible=false   ReadOnly   />  
  <asp:BoundColumn   HeaderText="工作"   DataField="GZName"     ReadOnly/>  
  <asp:BoundColumn   HeaderText="操作"   DataField="DispName"   ReadOnly   />  
  <asp:BoundColumn   HeaderText="时间"   DataField="E_Time"   />  
  <asp:TemplateColumn>  
  <ItemTemplate><img   src='../images/fx2.gif'   height=25></ItemTemplate>  
  </asp:TemplateColumn>  
  <asp:EditCommandColumn   EditText="单项修改"   CancelText="取消"   UpdateText="保存"   ItemStyle-Wrap="false"   HeaderText="单项修改"   HeaderStyle-Wrap="false"/>  
  </Columns>  
  </asp:DataGrid>  
  </form>  
  </body>  
  </html>  
  Top

7 楼ynduanlian(进一步海阔天高,退一步粉身碎骨)回复于 2005-02-01 15:21:46 得分 0

TextBox   NTime=(TextBox)(e.Item.Cells[3].Controls[0]);  
  Response.Write(NTime.Text);  
  ======================================  
  按理说这里取得的应当是我输入的新值,但实际却总是原来的值,怎么办?Top

8 楼LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^)回复于 2005-02-01 15:24:54 得分 6

public   void   Page_Load(Object   sender,EventArgs   e){  
  if(!Page.IsPostback)  
  {  
          StrGccode=Request.QueryString["GCCODE"];  
      BindData();  
  }  
      }Top

9 楼AllenTing(今天你GC了吗???)回复于 2005-02-01 15:45:06 得分 0

public   void   Page_Load(Object   sender,EventArgs   e){  
      StrGccode=Request.QueryString["GCCODE"];  
      BindData();  
  }  
  当然要进行IsPostBack的判断的Top

相关问题

  • datagrid编辑时怎么取得文本框中的值?
  • 怎样用Javascript取得Datagrid的值?
  • 如何取得DATAGRID中的值!!(急C#)
  • 如何取得DataGrid模版里TextBox值
  • 怎么取得下拉框的值
  • 用javascript 取得form 文本框的值
  • 怎样取得html输入框的值?
  • 如何取得Datagrid里的checkbox返回值?????
  • 在DataGrid1_ItemDataBound事件中如何取得datagrid某列的值?
  • DataGrid中怎样取得<ItemTemplate>摸板中的值?

关键词

得分解答快速导航

  • 帖主:ynduanlian
  • AllenTing
  • wanghaijun240
  • spland
  • LoveCherry

相关链接

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

广告也精彩

反馈

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