Я пытаюсь создать свой собственный веб-сайт викторины, используя ASP C#.
Я пытался связать вопрос из базы данных в gridview
и установить размер страницы gridview
в 1. А затем я попытался перетащить вариант ответов (4 варианта) в radioButton
.
Но когда я попытался перейти с 1 страницы gridview
на другую страницу, проверенное значение потеряно. Я знаю, что из-за того, что когда мы изменили страницу gridview
, она выдаст postback
.
Мои вопросы:
- Почему я не могу получить доступ к своему
RadioButton
из CodeBehind? Это из-за внутри Updatepanel? - Возможно ли, если мы хотим сделать изменение индекса страницы в gridview без
postback
? Или, - , есть ли другой вариант, чтобы мое
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();
}
Спасибо за любую помощь и предложения.