2013-04-30 23 views
0

我正在使用UpdatePanel和Ajax Tabcontainer。我有一个项目模板列有复选框和单选按钮。它们中的任何一个都可以基于一种场地来看到。gridview中的单选按钮总是返回checked = false里面的ajax更新面板

<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> 

我当点击一个按钮,我试图环通在这个GridView的每一个项目,使用FindControl方法找到复选框,单选按钮检查回传

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

后填充它。高兴这一点是有效的,但即使选中,单选按钮检查也始终为假。但是,如果选中或不选,复选框将正常工作(为已选属性提供正确的值)。见下面

在按钮的代码单击

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

更多在这个相同的问题,我们发现另一个奇怪的事情,无线电选择在第二次尝试工作意味着,如果我们尝试偶数按钮点击它确实返回正确的值检查!非常困难,因为这意味着逻辑是正确的,那么有什么不对,请帮助。 – 2013-04-30 21:18:04

回答

0

花了很多小时后,终于发现这种奇怪的行为是因为我们在RowDataBound事件中以编程方式更改单选按钮的ID。请参阅下面的代码。

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;   

     } 
    } 

所以我上述逻辑移除并且使用下面的逻辑,而不是与单选按钮

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);  

     } 
    } 

即解决了我上述这两个问题的沿通过的各种参数。

相关问题