【发布时间】:2020-06-10 23:40:38
【问题描述】:
我正在尝试使用 ASP C# 创建自己的在线测验网站。
我尝试将数据库中的问题绑定到gridview,并将gridview 的页面大小设置为1。
然后我尝试将答案选项(4 选项)拉入radioButton。
但是当我试图从gridview 的第一页移动到另一页时,检查的值丢失了。我知道那是因为当我们更改gridview 页面时,它会执行postback。
我的问题是:
- 为什么我无法从 CodeBehind 访问我的
RadioButton?是因为在更新面板里面吗? - 如果我们想在不使用
postback的情况下在gridview 中更改页面索引,是否有可能?或者, - 是否有其他选项可以让我的
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();
}
感谢您的任何帮助和建议。
【问题讨论】:
-
更改索引时是否尝试过传递复选框值?
-
我无法从后面的代码访问我的 RadioButton,编辑了我的问题。为什么我无法获得我的 RadioButton ID ?请帮忙。
-
这是因为您在 PageIndexChanging 事件中再次调用 BindGrid()。
-
@Atk 是的,我知道。但是如果不再次调用 BindGrid(),如果我更改分页索引,GridView 值不会改变。你有什么建议吗?或者如果不使用gridview有什么方法?
-
@RANDY 有很多方法可以实现这一目标。 Whenever checkbox is checked, store that result in a data table along with entire row.在 pageindex 更改事件上,将您的网格绑定到该数据表。
标签: c# asp.net gridview postback