FindControl в GridView возвращает NULL при использовании с CheckBox

Проблема: добавление флажка или другого поля ItemTemplate без метки приводит к нулевому возвращению метода FindControl.

Нормальное поведение. Обычно, когда пользователь нажимает кнопку "Изменить", поля EditItemTemplate становятся доступными, и я могу использовать метод FindControl для получения элементов управления. Просто верно?

protected void grdOppProducts_RowDataBound(object sender, GridViewRowEventArgs e) {

    if (e.Row.RowType == DataControlRowType.DataRow) {
        if (e.Row.RowState == DataControlRowState.Edit) {
            //only enters edit mode where checkbox control isn't available
            TextBox txtQuantity = (TextBox)e.Row.FindControl("txtQuantity");
        }
        ...

Причина. Теперь при добавлении поля "ItemTemplate" в микшер gridView rowState никогда не переходит в режим "Edit", поэтому элементы управления "EditItemTemplate" никогда не доступны, что приводит к нулевым значениям.

Элемент управления gridView определяется следующим образом (поле checkBox, cbxSelect, вызывает проблему)

<asp:GridView runat="server" id="oppProdgrdView" gridlines="None" AllowPaging="False" selectedrowstyle LightCyan="backcolor"
    autogeneratecolumns="false" 
    autoGenerateEditButton="false" 
    autoGenerateDeleteButton="true"
    OnRowDataBound="grdOppProducts_RowDataBound"
    OnRowCommand="grdOppProducts_RowCommand"
    OnRowUpdating="grdOppProducts_RowUpdating" 
    OnRowUpdated="grdOppProducts_RowUpdated"
    OnRowCancelingEdit="grdOppProducts_RowCancelingEdit"
    OnRowEditing="grdOppProducts_RowEditing" 
    OnRowDeleting="grdOppProducts_RowDeleting"
    cellpadding="1" cssclass="datagrid" pagerstyle-cssclass="gridPager"
alternatingrowstyle-cssclass="rowdk" rowstyle-cssclass="rowlt" selectedrowstyle-cssclass="rowSelected" showemptytable="True" enableviewstate="false"
emptytablerowtext="<%$ resources:dgOppProducts.EmptyTableRowText %>" expandablerows="True" resizablecolumns="True" currentsortdirection="Ascending" currentsortexpression="" 
datasourceid="SqlDataSource2" datakeynames="OPPPRODUCTID" showsorticon="False" useslxpagertemplate="True" AllowSorting="true" PageSize="16">

   <Columns>
       <asp:commandfield showeditbutton="true" causesvalidation="false" headertext=""/>

       <asp:BoundField DataField="OPPPRODUCTID" ItemStyle-CssClass="hidden-column" HeaderStyle-CssClass="hidden-column"
          HeaderText="OppProductId">
       </asp:BoundField>

       <asp:BoundField DataField="PRODUCTID" ItemStyle-CssClass="hidden-column" HeaderStyle-CssClass="hidden-column"
          HeaderText="ProductId">
       </asp:BoundField>

       <asp:TemplateField HeaderStyle-HorizontalAlign="Left"> 
            <ItemTemplate>
                <asp:CheckBox ID="cbxSelect" style="width: 10px;" runat="server" AutoPostBack="false" onClick="getCheckBoxValue($(this));" />
            </ItemTemplate>
       </asp:TemplateField>**

       <asp:TemplateField HeaderText="Line #" HeaderStyle-HorizontalAlign="Left"> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtSort" style="width: 25px;" runat="server" AutoPostBack="false" Text='<%# Bind("SORT") %>'></asp:TextBox> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="lblSort" runat="server" Text='<%# Bind("SORT") %>'></asp:Label> 
           </ItemTemplate>
        </asp:TemplateField>

       <asp:TemplateField HeaderText="Description" HeaderStyle-HorizontalAlign="Left"> 
           <ItemTemplate> 
            <asp:Label ID="lblName" runat="server" Text='<%# Bind("PRODUCTNAME") %>'></asp:Label> 
           </ItemTemplate>
        </asp:TemplateField>

       <asp:TemplateField HeaderText="Version">
           <ItemTemplate>
                <asp:Label Text='<%# ACDGetVersion(Eval("PRODUCTID").ToString())%>'
                    runat="server" />
           </ItemTemplate>
       </asp:TemplateField>

       <asp:TemplateField HeaderText="Prorate">
           <EditItemTemplate> 
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
           </EditItemTemplate> 
           <EditItemTemplate>
                <asp:TextBox ID="txtPeriodAdjustment" style="width: 25px;" autopostback="false" Text='<%#ACDGetPeriodAdjustment(Eval("OPPPRODUCTID").ToString()) %>'
                    runat="server" />
           </EditItemTemplate>
           <ItemTemplate>
                <asp:Label ID="txtPer2" Text='<%#ACDGetPeriodAdjustment(Eval("OPPPRODUCTID").ToString()) %>'
                    runat="server" />
           </ItemTemplate>
       </asp:TemplateField>

       <asp:TemplateField HeaderText="Qty" HeaderStyle-HorizontalAlign="Left"> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtQuantity" style="width: 25px;" runat="server" autopostback="false" Text='<%# Bind("QUANTITY") %>'></asp:TextBox> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="lblQuantity" runat="server" Text='<%# Bind("QUANTITY") %>'></asp:Label> 
           </ItemTemplate>
       </asp:TemplateField>

        <asp:TemplateField HeaderText="LicType" HeaderStyle-HorizontalAlign="Left"> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtUnit" style="width: 100px;" runat="server" AutoPostBack="false" Text='<%# Bind("UNIT") %>'></asp:TextBox> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="lblUnit" runat="server" Text='<%# Bind("UNIT") %>'></asp:Label> 
           </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="UnitList" HeaderStyle-HorizontalAlign="Left"> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtUnitListPrice" style="width: 80px;" runat="server" autopostback="false" Text='<%# Bind("UNITLISTPRICE") %>'></asp:TextBox> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="lblUnitListPrice" runat="server" Text='<%# Bind("UNITLISTPRICE") %>'></asp:Label> 
           </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="ExtList" HeaderStyle-HorizontalAlign="Left"> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtExtendedListPrice" style="width: 80px;" runat="server" autopostback="false" Text='<%# Bind("EXTENDEDLISTPRICE") %>'></asp:TextBox> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="lblExtendedListPrice" runat="server" Text='<%# Bind("EXTENDEDLISTPRICE") %>'></asp:Label> 
           </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="AcadDisc" HeaderStyle-HorizontalAlign="Left"> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtExtendedAcademicDiscAmt" style="width: 50px;" runat="server" ReadOnly="true" autopostback="false" Text='<%# Bind("EXTENDEDACADEMICDISCAMT") %>'></asp:TextBox> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="lblExtendedAcademicDiscAmt" runat="server" Text='<%# Bind("EXTENDEDACADEMICDISCAMT") %>'></asp:Label> 
           </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="%AddlDisc" HeaderStyle-HorizontalAlign="Left"> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtApproxDiscretionDiscPct" style="width: 30px;" runat="server" readonly="true" autopostback="false" Text='<%# Bind("APPROXDISCRETIONDISCPCT") %>'></asp:TextBox> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="lblApproxDiscretionDiscPct" runat="server" Text='<%# Bind("APPROXDISCRETIONDISCPCT") %>'></asp:Label> 
           </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="AddlDisc" HeaderStyle-HorizontalAlign="Left"> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtExtendedDiscretionDiscAmt"  style="width: 50px;" runat="server" autopostback="false" Text='<%# Bind("EXTENDEDDISCRETIONDISCAMT") %>'></asp:TextBox> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="lblExtendedDiscretionDiscAmt" runat="server" Text='<%# Bind("EXTENDEDDISCRETIONDISCAMT") %>'></asp:Label> 
           </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="UnitNet" HeaderStyle-HorizontalAlign="Left"> 
           <EditItemTemplate> 
            <asp:TextBox ID="txtUnitNetPrice"  style="width: 70px;" runat="server" ReadOnly="true" Text='<%# Bind("UNITNETPRICE") %>'></asp:TextBox> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="Label1" runat="server" Text='<%# Bind("UNITNETPRICE") %>'></asp:Label> 
           </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderText="ExtNet" HeaderStyle-HorizontalAlign="Left"> 
           <EditItemTemplate>  
            <asp:TextBox ID="txtExtendedNetPrice" style="width: 70px;" runat="server" ReadOnly="true" Text='<%# Bind("EXTENDEDNETPRICE") %>'></asp:TextBox> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="lblExtendedNetPrice" runat="server" Text='<%# Bind("EXTENDEDNETPRICE") %>'></asp:Label> 
           </ItemTemplate>
        </asp:TemplateField>

   </Columns>

Примечание. Это работает, если я создаю поле с меткой как itemTemplate, хотя мне нужно иметь возможность выбрать несколько флажков, не переключаясь в режим редактирования:

       <asp:TemplateField HeaderText="Line test" HeaderStyle-HorizontalAlign="Left"> 
           <EditItemTemplate> 
            <asp:CheckBox ID="TextBox2" style="width: 25px;" runat="server" AutoPostBack="false"></asp:CheckBox> 
           </EditItemTemplate> 
           <ItemTemplate> 
            <asp:Label ID="Label2" style="width: 25px;" runat="server" Text="test"></asp:Label> 
           </ItemTemplate>
        </asp:TemplateField>

Есть идеи? Заранее спасибо!

0 ответов

Другие вопросы по тегам