更改GridView分页索引时是否可以防止回发?

问题描述 投票:1回答:1

我正在尝试使用ASP C#创建自己的在线测验网站。

我试图将数据库中的问题绑定到gridview,并将gridview的页面大小设置为1。然后,我尝试将答案选项(4个选项)拉入radioButton

但是当我尝试从gridview的第一页移至另一页时,检查值丢失。我知道那是因为当我们更改gridview页面时,它将执行postback

我的问题是:

  1. 为什么我无法从CodeBehind访问我的RadioButton?是因为在Updatepanel内部吗?
  2. 是否可以在没有postback的情况下在gridview中进行页面索引更改?或者,
  3. 还有另一种选择可以使我的RadioButton检查值在切换到下一页时不丢失(下一个问题)?

这是我的代码:

** quiz.aspx:**

<asp:UpdatePanel ID="upd1" runat="server">
    <ContentTemplate>
        <asp:GridView ID="grdquestions" runat="server" EnableViewState="true" EnableSortingAndPagingCallbacks="false" OnPageIndexChanging="grdquestions_PageIndexChanging" AutoGenerateColumns="false" DataKeyNames="QuestionId" Width="100%" AllowPaging="True" AllowCustomPaging="False" PageSize="1" ViewStateMode="Enabled">
            <Columns>
                <asp:TemplateField HeaderText="DOJO eQuiz">
                    <ItemTemplate>
                        <table class="tableclass" id='<%#Eval("QuestionId") %>'>
                            <tr>
                                <td><b>Question : <%#Eval("Question") %></b>
                                    <asp:HiddenField ID="hdnquestionId" runat="server" />
                                </td>
                            </tr>
                            <tr>
                                <td>
                                    <table>

                                        <tr style="margin-top: 10px;">

                                            <td>
                                                <table class="tblOptions">
                                                    <tr>
                                                        <td>
                                                            <asp:RadioButton ID="rdOption1" AutoPostBack="true" runat="server" Text='<%#Eval("Option1") %>' GroupName="chcbox" />

                                                        </td>
                                                    </tr>
                                                    <tr>
                                                        <td>
                                                            <asp:RadioButton ID="rdOption2" runat="server" AutoPostBack="true" Text='<%#Eval("Option2") %>' GroupName="chcbox" />
                                                        </td>
                                                    </tr>
                                                    <tr>
                                                        <td>
                                                            <asp:RadioButton ID="rdOption3" runat="server" AutoPostBack="true" Text='<%#Eval("Option3") %>' GroupName="chcbox" />
                                                        </td>
                                                    </tr>
                                                    <tr>
                                                        <td>
                                                            <asp:RadioButton ID="rdOption4" runat="server" Text='<%#Eval("Option4") %>' GroupName="chcbox" />
                                                        </td>
                                                    </tr>
                                                    <tr>
                                                        <td>
                                                            <asp:Label ID="lbquestionstatus" runat="server"></asp:Label>
                                                        </td>
                                                    </tr>

                                                </table>
                                            </td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>

                        </table>

                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            <PagerStyle HorizontalAlign="Center" CssClass="GridPager" />
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

** quiz.aspx.cs **

protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["username"] == null)
        {
            Response.Redirect("Login.aspx");

        }
        else
        {
            if (!Page.IsPostBack)
            {
                BindGrid();

            }
            else
            {
            }
        } 
    }


 public void BindGrid()
    {
        var sess = Session["username"].ToString();
        string a = sess.Substring(sess.Length - 1);

        SqlDataAdapter adp = new SqlDataAdapter("select * from dojoquiz order by " + a + "", ConfigurationManager.ConnectionStrings["dashboardConnectionString"].ToString());
        adp.Fill(dt);

        grdquestions.DataSource = dt;
        grdquestions.DataBind();
    }

protected void grdquestions_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            RadioButtonList rdlstOptions = (RadioButtonList)e.Row.FindControl("rdlstOptions");
            HiddenField hdnquestionId = (HiddenField)e.Row.FindControl("hdnquestionId");
            if (rdlstOptions != null && hdnquestionId != null)
            {
                DataRow[] result = dt.Select("questionid=" + (Convert.ToInt32(hdnquestionId.Value)));
                DataView view = new DataView();
                view.Table = dt;
                view.RowFilter = "questionid=" + (Convert.ToInt32(hdnquestionId.Value));
                if (view.Table.Rows.Count > 0)
                {
                    DataTable dt1 = new DataTable();
                    dt1 = view.ToTable();
                }
            }
        }
    }

    protected void grdquestions_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grdquestions.PageIndex = e.NewPageIndex;
        this.BindGrid();
    }

谢谢您的帮助和建议。

c# asp.net gridview postback
1个回答
0
投票

如果sql查询没有更改,则不要在回发时执行DataBind(),但是您仍然需要给他数据源以获取数据。因此,您的代码必须为:

protected void Page_Load(object sender, EventArgs e)
{
    BindGrid();
}

public void BindGrid()
{
    var sess = Session["username"].ToString();
    string a = sess.Substring(sess.Length - 1);

    SqlDataAdapter adp = new SqlDataAdapter("select * from dojoquiz order by " + a + "", ConfigurationManager.ConnectionStrings["dashboardConnectionString"].ToString());
    adp.Fill(dt);

    grdquestions.DataSource = dt;

    if (!Page.IsPostBack)
        grdquestions.DataBind();
}

不可能在没有回发页面的情况下更改页面或对GridView进行思考,但是如果正确,这不是问题。

© www.soinside.com 2019 - 2024. All rights reserved.