Asp.net WebForm 中 UpdatePanel 内的模板文本框字段

Posted

技术标签:

【中文标题】Asp.net WebForm 中 UpdatePanel 内的模板文本框字段【英文标题】:Template TextBox feild inside UpdatePanel in Asp.net WebForm 【发布时间】:2015-12-16 08:12:08 【问题描述】:

我有一个数据绑定的 gridview,我在里面有一个 TextBox 模板字段

标记如下所示

<asp:UpdatePanel ID="UpdatePanel1"   runat="server">
    <ContentTemplate>
        <asp:GridView ID="tbl_costing" runat="server" AutoGenerateColumns="False" OnRowDataBound="tbl_costing_RowDataBound" CellPadding="4" ForeColor="#333333" GridLines="None" Width="1023px" ShowHeaderWhenEmpty="True">
            <AlternatingRowStyle BackColor="White" />
            <Columns>    

                <asp:TemplateField HeaderText="Consumption" SortExpression="Consumption">
                    <ItemTemplate>
                        <asp:UpdatePanel ID="UpdatePanel3" runat="server">
                            <ContentTemplate>
                                <asp:TextBox ID="txt_consumption" runat="server" Text='<%# Bind("Consumption") %>' AutoPostBack="True" OnTextChanged="txt_consumption_TextChanged"></asp:TextBox>
                            </ContentTemplate>
                        </asp:UpdatePanel>
                        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txt_consumption" ErrorMessage="Required" ForeColor="#CC3300">*
                        </asp:RequiredFieldValidator>                                        
                        <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txt_consumption" ErrorMessage="Enter valid Consumption" ForeColor="Red" ValidationExpression="^[\d.]+$">*
                        </asp:RegularExpressionValidator>
                    </ItemTemplate>
                </asp:TemplateField>

            </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

现在我需要在回发事件中获取Textbox 的行索引,我是这样做的

 protected void txt_consumption_TextChanged(object sender, EventArgs e)
                 
     try
     
         TextBox txtcons = (TextBox)sender;
         GridViewRow currentRow = (GridViewRow)txtcons.Parent.Parent; // Error Here .....
         int rowindex = 0;
         rowindex = currentRow.RowIndex;
         calculateperdozen(currentRow);    
     
     catch (Exception)
        
             

任何人都可以建议获得currentRowrowindex 的方法吗?

【问题讨论】:

【参考方案1】:

很抱歉,直到现在我还没有更新我为这个问题得到的解决方案。让它帮助有相同查询的人

我创建了一个类,它将循环直到它到达 Gridviewrow 作为命名容器

 public static class ControlTreeExtensions
    
        public static TContainer ClosestContainer<TContainer>(this Control theControl) where TContainer : Control
        
            if (theControl == null) throw new ArgumentNullException("theControl");

            Control current = theControl.NamingContainer;
            TContainer result = current as TContainer;
            while (current != null && result == null)
            
                current = current.NamingContainer;
                result = current as TContainer;
            

            return result;
        
    

然后在我的 Click 事件或 Change 中,即使我调用了该函数

protected void txt_consumption_TextChanged(object sender, EventArgs e)
                 
     try
     
  TextBox txtcons = (TextBox )sender;
   GridViewRow currentRow = txtcons.ClosestContainer<GridViewRow>();

         int rowindex = 0;
         rowindex = currentRow.RowIndex;
         calculateperdozen(currentRow);    
     
     catch (Exception)
        
             

【讨论】:

以上是关于Asp.net WebForm 中 UpdatePanel 内的模板文本框字段的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net中WebForm 与 MVC的架构区别

浅析ASP.NET Webform和ASP.NET MVC

想要从 XElements 中提取标签并在 ASP.NET Webform 上显示为网格

添加 toastr javascript asp.net webform

asp.net webform 中使用Microsoft ASP.NET Web Optimization压缩js及css

如何在asp.net C# Webform中制作像网格一样的Excel