【问题标题】:Checked state of RadioButtons in GridView don't change after postback回发后,GridView 中 RadioButtons 的检查状态不会改变
【发布时间】:2014-06-12 15:45:03
【问题描述】:

我有一个 Gridview 控件,并且我在 itemtemplate 中放置了一个 RadioButton。当我单击一个按钮时,我试图获取单选按钮的选中属性。但是当我单击选中的属性时总是返回false。请查看下面的代码,让我知道我在哪里犯了错误。

aspx 代码

<asp:GridView ID="gvDepartments" runat="server" AutoGenerateColumns="False" GridLines="None"AllowPaging="true" CssClass="mGrid" PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt">
      <Columns> 
       <asp:TemplateField>
         <ItemTemplate>
                 <asp:RadioButton ID="rdbtn" runat="server" />
         </ItemTemplate>
       </asp:TemplateField>
      </Columns>
    </asp:GridView>
<asp:Label ID="lbl" runat="server"></asp:Label>
<asp:Button ID="btn" runat="server" Text="Save" OnClick="btn_Click" CssClass="button small"/>

点击按钮后的代码

foreach (GridViewRow row in gvDepartments.Rows)
{
   if (row.RowType == DataControlRowType.DataRow)
    {
        RadioButton rd = (RadioButton)row.FindControl("rdbtn");
        lbl.Text += rd.Checked.ToString();// +rd1.Checked.ToString();
    }
}

标签中的结果总是 False。我在应用程序中使用 Ajaxcontroltoolkit,更新面板中存在上述控件,我什至尝试在触发器中放置按钮和事件,但结果是相同的。请帮忙。

问候,
努森·A·R

【问题讨论】:

  • 何时分配和加载GridViewDataSource?请注意,您应该只在 if(!IsPostBack) 上这样做,而不是在每次回发时这样做。
  • 数据源是什么,数据是否来自数据库?
  • 你在哪里使用 foreach 语句?在您的 Page_Load 事件或 btn_Click 内?如果它在 Page_Load 中,则该值始终为 false,但是如果将循环放在 btn_Click 方法中,那么它应该可以正常工作,除非您从页面加载中调用它而不检查 IsPostBack 属性
  • 对不起,我忘了把 If(!IsPostBack) 放在页面加载中。现在它工作正常。谢谢你们所有的cmets。我真的很感激。

标签: c# asp.net


【解决方案1】:

您何时分配和加载GridViewDataSource?请注意,您应该只在if(!IsPostBack) 上这样做,而不是在每次回发时这样做。所以使用Page.IsPostBack property

因此,假设您为此使用 Page_Load

protected void Page_Load(Object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        DataBindGridView(); // method that assigns DataSource and calls DataBind
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2019-01-30
    • 2019-05-15
    相关资源
    最近更新 更多