如何在 asp.net 中使用 linq 和多视图控件每次从数据库中获取单行
how to get single row each time from database using linq and multiview control in asp.net
我正在创建一个名为在线考试门户的项目。其中学生可以 select Technology
并进行考试。学生可以从下拉列表中 select 技术。
特定技术的问题来自数据库。现在我想在一个视图(多视图控件)中一次出现一个问题,也就是说,当学生单击下一步按钮时,只有第二个问题应该显示在同一视图中。
我能够检索到一个问题,但不能提前。
我试过以下代码:
ScheduleExam.Aspx :
<div class="col-md-6">
<div class="box-body">
<div class="form-group">
<asp:MultiView ID="mvExam" runat="server">
<asp:View ID="viewTech" runat="server">
<asp:DropDownList ID="ddlTechnology" runat="server" CssClass="form-control select2"></asp:DropDownList><br /><br />
<asp:Button ID="btnSchedule" Text="Schedule" CssClass="btn btn-primary" OnClick="btnSchedule_Click" runat="server" />
</asp:View>
<asp:View ID="viewTest" runat="server">
<asp:Label ID="lblQtnNum" runat="server"> </asp:Label><asp:Label ID="lblQuestion" runat="server"></asp:Label><br /><br />
<asp:RadioButton ID="rdbOpt1" runat="server" /><br />
<asp:RadioButton ID="rdbOpt2" runat="server" /><br />
<asp:RadioButton ID="rdbOpt3" runat="server" /><br /><br />
<asp:Button ID="btnNext" runat="server" CssClass="btn btn-primary" OnClick="btnNext_Click" Text="Next" />
</asp:View>
</asp:MultiView>
</div>
</div>
</div>
ScheduleExam.aspx.cs :
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
mvExam.ActiveViewIndex = 0;
using (dbDataContext dt = new dbDataContext())
{
var qry = from i in dt.Technologies
select i;
ddlTechnology.DataSource = qry;
ddlTechnology.DataTextField = "TechnologyName";
ddlTechnology.DataValueField = "TechnologyId";
ddlTechnology.DataBind();
ddlTechnology.Items.Insert(0, new ListItem("Select Technology", ""));
}
}
}
protected void btnSchedule_Click(object sender, EventArgs e)
{
using (dbDataContext dt = new dbDataContext())
{
var qry = from i in dt.Questions
where i.TechnologyId == ddlTechnology.SelectedIndex
select i;
Session["Question"] = qry.FirstOrDefault();
Session["Qt_Cnt"] = 1;
mvExam.ActiveViewIndex = 1;
foreach (var item in qry)
{
lblQtnNum.Text = Session["Qt_Cnt"].ToString();
lblQuestion.Text = item.Question1;
rdbOpt1.Text = item.Option1;
rdbOpt2.Text = item.Option2;
rdbOpt3.Text = item.Option3;
break;
}
}
}
我在网上搜索过,但没有找到任何有用的结果。如果缺少任何信息,请发表评论。
您可以在查询中使用 Skip()
和 Take()
:
var qry = (from i in dt.Questions
where i.TechnologyId == ddlTechnology.SelectedIndex
select i).Skip(currentPage).Take(1);
然后将 currentPage
变量添加到 class 并在 下一页 按钮处理程序中递增它。当然,下一页 按钮处理程序必须重新执行您在 btnSchedule_Click
方法中的代码。
请注意,在我的示例中 currentPage
必须从零开始(第一页是 0,而不是 1)
我正在创建一个名为在线考试门户的项目。其中学生可以 select Technology
并进行考试。学生可以从下拉列表中 select 技术。
特定技术的问题来自数据库。现在我想在一个视图(多视图控件)中一次出现一个问题,也就是说,当学生单击下一步按钮时,只有第二个问题应该显示在同一视图中。 我能够检索到一个问题,但不能提前。
我试过以下代码:
ScheduleExam.Aspx :
<div class="col-md-6">
<div class="box-body">
<div class="form-group">
<asp:MultiView ID="mvExam" runat="server">
<asp:View ID="viewTech" runat="server">
<asp:DropDownList ID="ddlTechnology" runat="server" CssClass="form-control select2"></asp:DropDownList><br /><br />
<asp:Button ID="btnSchedule" Text="Schedule" CssClass="btn btn-primary" OnClick="btnSchedule_Click" runat="server" />
</asp:View>
<asp:View ID="viewTest" runat="server">
<asp:Label ID="lblQtnNum" runat="server"> </asp:Label><asp:Label ID="lblQuestion" runat="server"></asp:Label><br /><br />
<asp:RadioButton ID="rdbOpt1" runat="server" /><br />
<asp:RadioButton ID="rdbOpt2" runat="server" /><br />
<asp:RadioButton ID="rdbOpt3" runat="server" /><br /><br />
<asp:Button ID="btnNext" runat="server" CssClass="btn btn-primary" OnClick="btnNext_Click" Text="Next" />
</asp:View>
</asp:MultiView>
</div>
</div>
</div>
ScheduleExam.aspx.cs :
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
mvExam.ActiveViewIndex = 0;
using (dbDataContext dt = new dbDataContext())
{
var qry = from i in dt.Technologies
select i;
ddlTechnology.DataSource = qry;
ddlTechnology.DataTextField = "TechnologyName";
ddlTechnology.DataValueField = "TechnologyId";
ddlTechnology.DataBind();
ddlTechnology.Items.Insert(0, new ListItem("Select Technology", ""));
}
}
}
protected void btnSchedule_Click(object sender, EventArgs e)
{
using (dbDataContext dt = new dbDataContext())
{
var qry = from i in dt.Questions
where i.TechnologyId == ddlTechnology.SelectedIndex
select i;
Session["Question"] = qry.FirstOrDefault();
Session["Qt_Cnt"] = 1;
mvExam.ActiveViewIndex = 1;
foreach (var item in qry)
{
lblQtnNum.Text = Session["Qt_Cnt"].ToString();
lblQuestion.Text = item.Question1;
rdbOpt1.Text = item.Option1;
rdbOpt2.Text = item.Option2;
rdbOpt3.Text = item.Option3;
break;
}
}
}
我在网上搜索过,但没有找到任何有用的结果。如果缺少任何信息,请发表评论。
您可以在查询中使用 Skip()
和 Take()
:
var qry = (from i in dt.Questions
where i.TechnologyId == ddlTechnology.SelectedIndex
select i).Skip(currentPage).Take(1);
然后将 currentPage
变量添加到 class 并在 下一页 按钮处理程序中递增它。当然,下一页 按钮处理程序必须重新执行您在 btnSchedule_Click
方法中的代码。
请注意,在我的示例中 currentPage
必须从零开始(第一页是 0,而不是 1)