CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

web中datagrid的TemplateColumn中等难度问题——〉找了一下以前的帖子没发现类似的问题

楼主xinyulou(心雨楼)2003-09-04 18:23:55 在 .NET技术 / C# 提问

我在我的datagrid中加入一列TemplateColumn  
  然后  
  在ItemTemplate中加入一个Label     ID   =   lb   绑定到数据库的一列  
  在EditItemTemplate中加入一个DropDownList     绑定到另外一个数据库的一列  
   
  没有什么技术问题  
   
  就是点编辑的时候,当然,也是很自然的事情了,这个摸板列的这一行就显示  
  DropDownList   的内容,那别的行还是显示Label重磅定大数据空中那一列的值;  
  这些都没什么疑问。  
   
  现在就是编辑完以后点确定,我取得DropDownList中的内容,然后去跟别的行中的Label   的值进行比较。但是问题就出现了,因为是在编辑状态下,所以无法用  
  (Label)DataGrid1.Items[i].Cells[2].FindControl("lb").Text.ToString();  
  这样是取不到值的。  
  这样DataGrid1.Items[i].Cells[2].Text.ToString();也取不到值的.  
   
  不知道还有什么办法  
  问题点数:100、回复次数:14Top

1 楼zjjszw(【湘:張家界】穿裤叉的蚊子【抵制日貨】)回复于 2003-09-04 18:38:36 得分 5

你是寫在哪個事件里面的?試試看  
  string   ordno=((Label)e.Item.FindControl("lb")).Text;  
   
  Top

2 楼xinyulou(心雨楼)回复于 2003-09-04 18:55:14 得分 0

这样是取不到的,而且我不止取一个值,我要取整列的值。  
   
  关键是,在编辑状态下事取不到FindControl("lb")的。这样做是不可能的。  
   
  不知道除了FindControl还有什么方法呢?Top

3 楼possible_Y(████本人签名需要刮开,方可看到 )回复于 2003-09-04 19:01:32 得分 5

点编辑的时候将lb的text先保存到一个变量中Top

4 楼xinyulou(心雨楼)回复于 2003-09-04 19:09:23 得分 0

那我要有一千条记录、或者更多,这样会不好。  
  而且可能大量点编辑就会很不好。  
  Top

5 楼xinyulou(心雨楼)回复于 2003-09-04 20:11:41 得分 0

怎么都没有人呢?Top

6 楼zjjszw(【湘:張家界】穿裤叉的蚊子【抵制日貨】)回复于 2003-09-04 20:21:38 得分 5

在DataGrid的UpdateCommand事件中可以取到模板中的label的數值  
  在EditCommand事件下可能取不到Top

7 楼xinyulou(心雨楼)回复于 2003-09-04 21:29:20 得分 0

是在UpdateCommand下取的,还是取不到的,因为在编辑状态下点确定的时候引发UpdateCommand事件,所以还是取不到。  
   
  不知道还有什么办法啊?  
   
  救命啊!!!!Top

8 楼zjjszw(【湘:張家界】穿裤叉的蚊子【抵制日貨】)回复于 2003-09-04 21:51:15 得分 10

這是我以前寫的一段修改數據的代碼,希望對你有幫助:  
  ===================================================================  
  aspx中(DataGrid的修改列)﹕  
  <asp:EditCommandColumn   ButtonType="LinkButton"   UpdateText="確定"   HeaderText="編輯"   CancelText="取消"   EditText="編輯">  
  </asp:EditCommandColumn>  
  ===================================================================  
  aspx.cs中:  
  private   void   DataGrid1_EditCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
          DataGrid1.EditItemIndex=e.Item.ItemIndex;  
                                                DataBind();  
                                        }  
   
  private   void   DataGrid1_UpdateCommand(object   source,   System.Web.UI.WebControls.DataGridCommandEventArgs   e)  
  {  
        string   ordno=((TextBox)e.Item.FindControl("ddhm")).Text;  
        string   supno=((TextBox)e.Item.FindControl("Textbox9")).Text;  
        string   orddate=((TextBox)e.Item.FindControl("Textbox10")).Text;  
        string   delsta=((TextBox)e.Item.FindControl("Textbox11")).Text;  
        string   delend=((TextBox)e.Item.FindControl("Textbox12")).Text;  
        string   curno=((TextBox)e.Item.FindControl("Textbox13")).Text;  
        string   paymode=((TextBox)e.Item.FindControl("Textbox14")).Text;  
       
  conn.comm("update   TableManager   set   dbName='"+ordno+"',tbName='"+supno+"',useSystem='"+orddate+"',author='"+delsta+"',[rows]='"+delend+"',[date]='"+Session["udate"]+"',memo='"+paymode+"'   where   rowguid='"+Session["bb"]+"'");  
  DataGrid1.EditItemIndex=-1;  
  conn.Gridbind("select   *   from   TableManager",DataGrid1);  
    }  
  ======================================================================  
  conn.comm()和comm.Gridbind()為我自己寫的方法。  
  在DataGrid的屬性事件中UpdateCommand=DataGrid1_UpdateCommandTop

9 楼xinyulou(心雨楼)回复于 2003-09-05 08:35:23 得分 0

To   zjjszw(阿丸)    
  我用的是摸板列!!!!!!!  
  你说的似乎是取得编辑的那一行的输入值,而我想要的是摸板列的所有行的值,除了正在编辑的这一行。Top

10 楼xinyulou(心雨楼)回复于 2003-09-05 12:40:23 得分 0

难道此问题真的无解决问题的方法吗?  
   
  help   ...Top

11 楼saucer(思归)回复于 2003-09-05 12:54:36 得分 65

>>>然后去跟别的行中的Label   的值进行比较。但是问题就出现了,因为是在编辑状态下,所以无法用  
   
  are   you   sure??   try  
   
   
  <%@   Import   Namespace="System.Data"   %>  
  <%@   Import   Namespace="System.Data.SqlClient"   %>  
  <script   language="C#"   runat="server">  
   
          protected   void   Page_Load(Object   Src,   EventArgs   E)  
          {  
                  if   (!IsPostBack)  
                          BindGrid();  
          }  
   
          public   void   MyDataGrid_Edit(Object   sender,   DataGridCommandEventArgs   e)  
          {  
                  MyDataGrid.EditItemIndex   =   (int)e.Item.ItemIndex;  
                  BindGrid();  
                   
          }  
   
          public   void   MyDataGrid_Cancel(Object   sender,   DataGridCommandEventArgs   e)  
          {  
   
                  MyDataGrid.EditItemIndex   =   -1;  
                  BindGrid();  
          }  
   
          public   void   MyDataGrid_Update(Object   sender,   DataGridCommandEventArgs   e)  
          {  
  TextBox   tb   =     (TextBox)e.Item.FindControl("TextBox1");  
   
  Response.Write("****in   Update:"   +   tb.Text   +   "****");  
   
  foreach   (DataGridItem   dgi   in   MyDataGrid.Items)  
  {  
  if   (e.Item   !=   dgi)  
  {  
  Label   l   =   (Label)dgi.FindControl("Label1");  
  Response.Write("****other   columns:"   +   l.Text   +   "****");  
  }  
  }  
   
                  MyDataGrid.EditItemIndex   =   -1;  
                  BindGrid();  
          }  
                   
          public   void   BindGrid()  
          {  
                  SqlDataAdapter   da   =   new   SqlDataAdapter("select   *   from   authors",   "server=(local);database=pubs;uid=sa;pwd=;");  
   
                  DataTable   dt   =   new   DataTable();  
                  da.Fill(dt);  
   
                  MyDataGrid.DataSource=dt.DefaultView;  
                  MyDataGrid.DataBind();  
   
          }  
   
  </script>  
  <body>  
      <form   runat="server">  
   
          <ASP:DataGrid   id="MyDataGrid"   runat="server"  
              OnEditCommand="MyDataGrid_Edit"  
              OnCancelCommand="MyDataGrid_Cancel"  
              OnUpdateCommand="MyDataGrid_Update"  
              DataKeyField="au_id">  
   
              <Columns>  
                  <asp:EditCommandColumn   EditText="Edit"   CancelText="Cancel"   UpdateText="Update"   ItemStyle-Wrap="false"/>  
   
  <ASP:TEMPLATECOLUMN   headertext="Unit">  
              <ITEMTEMPLATE>  
                <asp:Label   id="Label1"   runat="server"  
  Text='<%#DataBinder.Eval(Container.DataItem,   "au_lname")   %>'>  
                </ASP:LABEL>  
              </ITEMTEMPLATE>  
              <EDITITEMTEMPLATE>  
                <asp:TextBox   id="TextBox1"   runat="server"   Text='<%#  
  DataBinder.Eval(Container.DataItem,   "au_lname")   %>'>  
                </ASP:TEXTBOX>  
                <ASP:REQUIREDFIELDVALIDATOR   id="RequiredFieldValidator1"  
  runat="server"   controltovalidate="TextBox1"  
  errormessage="Required*****"></ASP:REQUIREDFIELDVALIDATOR>  
   
  <asp:DropdownList   ID="progress"   runat="server"   Width="40">  
  <asp:ListItem   Value="80">80</asp:ListItem>  
  <asp:ListItem   Value="90">90</asp:ListItem>  
  <asp:ListItem   Value="100">100</asp:ListItem>  
  </asp:DropdownList>  
              </EDITITEMTEMPLATE>  
            </ASP:TEMPLATECOLUMN>  
            </Columns>  
          </ASP:DataGrid>  
      </form>  
  </body>  
  Top

12 楼saucer(思归)回复于 2003-09-05 12:55:00 得分 0

>>>然后去跟别的行中的Label   的值进行比较。但是问题就出现了,因为是在编辑状态下,所以无法用  
   
  are   you   sure??   try  
   
   
  <%@   Import   Namespace="System.Data"   %>  
  <%@   Import   Namespace="System.Data.SqlClient"   %>  
  <script   language="C#"   runat="server">  
   
          protected   void   Page_Load(Object   Src,   EventArgs   E)  
          {  
                  if   (!IsPostBack)  
                          BindGrid();  
          }  
   
          public   void   MyDataGrid_Edit(Object   sender,   DataGridCommandEventArgs   e)  
          {  
                  MyDataGrid.EditItemIndex   =   (int)e.Item.ItemIndex;  
                  BindGrid();  
                   
          }  
   
          public   void   MyDataGrid_Cancel(Object   sender,   DataGridCommandEventArgs   e)  
          {  
   
                  MyDataGrid.EditItemIndex   =   -1;  
                  BindGrid();  
          }  
   
          public   void   MyDataGrid_Update(Object   sender,   DataGridCommandEventArgs   e)  
          {  
  TextBox   tb   =     (TextBox)e.Item.FindControl("TextBox1");  
   
  Response.Write("****in   Update:"   +   tb.Text   +   "****");  
   
  foreach   (DataGridItem   dgi   in   MyDataGrid.Items)  
  {  
  if   (e.Item   !=   dgi)  
  {  
  Label   l   =   (Label)dgi.FindControl("Label1");  
  Response.Write("****other   columns:"   +   l.Text   +   "****");  
  }  
  }  
   
                  MyDataGrid.EditItemIndex   =   -1;  
                  BindGrid();  
          }  
                   
          public   void   BindGrid()  
          {  
                  SqlDataAdapter   da   =   new   SqlDataAdapter("select   *   from   authors",   "server=(local);database=pubs;uid=sa;pwd=;");  
   
                  DataTable   dt   =   new   DataTable();  
                  da.Fill(dt);  
   
                  MyDataGrid.DataSource=dt.DefaultView;  
                  MyDataGrid.DataBind();  
   
          }  
   
  </script>  
  <body>  
      <form   runat="server">  
   
          <ASP:DataGrid   id="MyDataGrid"   runat="server"  
              OnEditCommand="MyDataGrid_Edit"  
              OnCancelCommand="MyDataGrid_Cancel"  
              OnUpdateCommand="MyDataGrid_Update"  
              DataKeyField="au_id">  
   
              <Columns>  
                  <asp:EditCommandColumn   EditText="Edit"   CancelText="Cancel"   UpdateText="Update"   ItemStyle-Wrap="false"/>  
   
  <ASP:TEMPLATECOLUMN   headertext="Unit">  
              <ITEMTEMPLATE>  
                <asp:Label   id="Label1"   runat="server"  
  Text='<%#DataBinder.Eval(Container.DataItem,   "au_lname")   %>'>  
                </ASP:LABEL>  
              </ITEMTEMPLATE>  
              <EDITITEMTEMPLATE>  
                <asp:TextBox   id="TextBox1"   runat="server"   Text='<%#  
  DataBinder.Eval(Container.DataItem,   "au_lname")   %>'>  
                </ASP:TEXTBOX>  
                <ASP:REQUIREDFIELDVALIDATOR   id="RequiredFieldValidator1"  
  runat="server"   controltovalidate="TextBox1"  
  errormessage="Required*****"></ASP:REQUIREDFIELDVALIDATOR>  
   
  <asp:DropdownList   ID="progress"   runat="server"   Width="40">  
  <asp:ListItem   Value="80">80</asp:ListItem>  
  <asp:ListItem   Value="90">90</asp:ListItem>  
  <asp:ListItem   Value="100">100</asp:ListItem>  
  </asp:DropdownList>  
              </EDITITEMTEMPLATE>  
            </ASP:TEMPLATECOLUMN>  
            </Columns>  
          </ASP:DataGrid>  
      </form>  
  </body>  
  Top

13 楼wymln(sdf)回复于 2003-09-05 13:20:48 得分 0

你试一下上面的方法  
  Top

14 楼jeall()回复于 2003-09-05 16:02:20 得分 10

我能问你的<asp:DropdownList   ID="progress"   runat="server"   Width="40">中的progress在修改的时候是怎么和数据库中的内容进行绑定的吗?并且,怎样使DropdownList选中progress内容所在项!急!正好要用到!  
  http://expert.csdn.net/Expert/topic/2227/2227242.xml?temp=.1263239Top

15 楼jeall()回复于 2003-09-05 16:05:07 得分 0

上面的文章位置给错了!  
  http://expert.csdn.net/Expert/topic/2227/2227242.xml?temp=.1263239Top

相关问题

  • 怎样才能在DataGrid(Web版)中动态加入TemplateColumn(模板列)?
  • 有难度的Web Service问题?
  • DATAGRID高难度问题,怎么做多层标题呀?
  • 关于DATAGRID的几个问题(有点难度)
  • DataGrid主从关系如何写?高难度!
  • 如何在datagrid动态添加templatecolumn?
  • 在 datagrid 中如何动态创建 TemplateColumn
  • 高分求教:DataGrid中TemplateColumn的问题
  • 来点高难度的问题!!!关于二个datagrid传送数据的问题!!!
  • datagrid样式问题,难得提一高难度的,UP者有分。

关键词

  • .net
  • datagrid
  • findcontrol
  • ordno
  • 值
  • textbox
  • updatecommand
  • 问题
  • 编辑
  • lb

得分解答快速导航

  • 帖主:xinyulou
  • zjjszw
  • possible_Y
  • zjjszw
  • zjjszw
  • saucer
  • jeall

相关链接

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

广告也精彩

反馈

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