2013-04-30 3 views
0

Я использую UpdatePanel и Ajax Tabcontainer. У меня есть один столбец шаблона элемента, который имеет как флажок, так и радиообъект. Либо один из них видим одновременно на основе одного битового поля.переключатель в gridview всегда возвращает checked = false внутри ajax updatepanel

<asp:GridView ID="gvAutoMatchFund" runat="server" AutoGenerateColumns="False" ClientIDMode="Static" 
    AllowPaging="True" PageSize="50" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" 
    OnRowDataBound="gvAutoMatchFund_RowDataBound" BorderWidth="1px" CellPadding="3" 
    onpageindexchanging="gvAutoMatchFund_PageIndexChanging" 
    Width="100%"> 
    <Columns> 
     <asp:BoundField DataField="DYNAMO_FUNDNAME" HeaderText="Dynamo Fund Name" ItemStyle-Width="25%" /> 
     <asp:BoundField DataField="DYNAMO_FUNDID" HeaderText="Dynamo Fund ID" ItemStyle-Width="25%" /> 
     <asp:BoundField DataField="INVESTRAN_FUNDNAME" HeaderText="Investran Fund Name" ItemStyle-Width="25%" /> 
     <asp:BoundField DataField="INVESTRAN_SYSTEMFUNDID" HeaderText="Inv. Sys. Fund ID" /> 
     <asp:TemplateField ItemStyle-Width="80px" ItemStyle-HorizontalAlign="Center"> 
      <HeaderTemplate> 
       <asp:CheckBox ID="chkSelAll" Text="Select" runat="server" /> 
      </HeaderTemplate> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkSel" runat="server" Visible='<%#(!(bool)Eval("ISMULTIPLE"))%>' /> 
       <asp:RadioButton ID="rdoSel" runat="server" Visible='<%#((bool)Eval("ISMULTIPLE"))%>' />                  
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
    <FooterStyle BackColor="White" ForeColor="#000066" /> 
    <HeaderStyle BackColor="#C6E5F5" Font-Bold="True" ForeColor="#4695BD" /> 
    <PagerStyle BackColor="White" ForeColor="#000066" HorizontalAlign="Left" /> 
    <RowStyle ForeColor="#000066" /> 
    <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" /> 
    <SortedAscendingCellStyle BackColor="#F1F1F1" /> 
    <SortedAscendingHeaderStyle BackColor="#007DBB" /> 
    <SortedDescendingCellStyle BackColor="#CAC9C9" /> 
    <SortedDescendingHeaderStyle BackColor="#00547E" /> 
    <EmptyDataRowStyle ForeColor="Maroon" /> 
</asp:GridView> 

Я заселение его после проверки постбэк

if (!Page.IsPostBack) 
{ 
    ... 
    PopulateMyGV(); 
} 

При нажатии на кнопку Я пытаюсь петлю через каждый элемент в этом GridView и используя метод FindControl найти флажок и радиокнопку. Пока эта точка работает, однако проверенная радиокамера всегда ложна, даже если она выбрана. Однако флажок работает отлично (дает правильное значение для проверенного свойства), если выбрано или нет. Смотрите ниже код

В кнопке мыши

foreach (GridViewRow gvr in gvAutoMatchFund.Rows) 
{ 

    CheckBox chkSel = (CheckBox)gvr.FindControl("chkSel");  
    RadioButton rdoSel = (RadioButton)gvr.FindControl("rdoSel"); 

    if (chkSel != null) 
    { 
     if (chkSel.Checked) 
     { 
      ... 
     } 
    } 

    if (rdoSel != null) 
    { 
     if (rdoSel.Checked) 
     { 
      ... 
     } 
    } 

} 

Что мне не хватает?

+0

Подробнее о том же вопросе, что мы нашли, является еще одной странной вещью, которую радиоприемник работает во вторых попытках, означает, что если мы попробуем для кнопки с четным номером, то он вернет правильное значение для проверки !!! чрезвычайно сложно, поскольку это означает, что логика правильная, тогда что не так, пожалуйста, помогите. –

ответ

0

Проведя много часов, мы обнаружили, что это странное поведение происходит из-за того, что мы меняли идентификатор переключателя программно в событии RowDataBound. См. Код ниже.

protected void gvAutoMatchFund_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      USP_MDM_SUGGESTED_AUTOMATCH_FUNDResult objUSP_MDM_SUGGESTED_AUTOMATCH_FUNDResult = (USP_MDM_SUGGESTED_AUTOMATCH_FUNDResult)e.Row.DataItem; 

      RadioButton rdoSel = (RadioButton)e.Row.FindControl("rdoSel"); 
      rdoSel.ID = "rdoSel_" + objUSP_MDM_SUGGESTED_AUTOMATCH_FUNDResult.DYNAMO_FUNDID 
         + "_" + objUSP_MDM_SUGGESTED_AUTOMATCH_FUNDResult.INVESTRAN_SYSTEMFUNDID 
         + "_" + objUSP_MDM_SUGGESTED_AUTOMATCH_FUNDResult.INVESTRAN_FUNDID;   

     } 
    } 

Так я извлекал выше логики и использовали следующую логику вместо того, чтобы передавать различные параметры наряду с RadioButton

protected void gvAutoMatchFund_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      USP_MDM_SUGGESTED_AUTOMATCH_FUNDResult objUSP_MDM_SUGGESTED_AUTOMATCH_FUNDResult = (USP_MDM_SUGGESTED_AUTOMATCH_FUNDResult)e.Row.DataItem; 

      RadioButton rdoSel = (RadioButton)e.Row.FindControl("rdoSel"); 
      string sValue = "rdoSel_" + objUSP_MDM_SUGGESTED_AUTOMATCH_FUNDResult.DYNAMO_FUNDID 
         + "_" + objUSP_MDM_SUGGESTED_AUTOMATCH_FUNDResult.INVESTRAN_SYSTEMFUNDID 
         + "_" + objUSP_MDM_SUGGESTED_AUTOMATCH_FUNDResult.INVESTRAN_FUNDID; 

      rdoSel.Attributes.Add("value", sValue);  

     } 
    } 

Это решило обе проблемы я описал выше.

Смежные вопросы