数据准备好后一行一行绑定GridView
Bind GridView Row One By One After Data is Prepared
我处理大量学生的考试数据以显示学生成绩。虽然它似乎有效,但显示结果需要更长的时间。时间每天都在增加。
- 我有一个问题 table (tblQuestions) 来存储问题和正确答案。
- 我有一个测试实例 table (tblTestInstance),它存储学生给出的每个测试的测试实例。
- 我拥有的最大 table 是 tblTestDetails,它存储学生选择的问题 ID 和选项。
我将 GridView 与学生绑定 table 并且在 GridView 的数据绑定事件中,我为每个学生计算学生尝试的每个问题的正确答案。我计算数据里面的数据table.
问题是:处理结果需要几分钟时间。
必需建议:我想逐行绑定 gridview(每行一旦单个结果准备就绪)而不是一次加载所有计算结果。
我试过的方法:我使用了带有定时器控制的更新面板。在几秒钟的间隔内,我尝试重新加载我的数据table,但它仍然一起显示结果。
有什么建议吗。我正在使用 ASP.NET Web 表单。
编辑:
我想逐行显示结果。我的意思是当第一行准备就绪时,它应该显示在用户的屏幕上。这不会提高我知道的性能,但我希望用户在屏幕上看到一些东西,而不是等待所有行都准备好。
例如,如果 class 有 1000 名学生,他们每人进行了 150 个或更多问题的测试,那么评估答案需要更长的时间。
我目前使用的方法
我从数据库中拉学生,并绑定网格视图
对于每个学生,我拉出测试实例,然后是问题集
对于每个问题,我都会使用问题的 table 来评估答案
计算分数后,我会显示它们。
一个技巧是使用 Response.Flush();
刷新数据
这里有一个例子
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Item" >
<ItemTemplate>
<%#cRenderLine(Container.DataItem)%>
<%
// show every 10 lines what I have
if (++cLine % 10 == 0)
{
Response.Flush();
// simulate the delay here
// System.Threading.Thread.Sleep(1000);
}
%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
以及后面的代码。
public int cLine = 0;
List<int> oMainIds = new List<int>();
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10000; i++)
{
oMainIds.Add(i);
}
GridView1.DataSource = oMainIds;
GridView1.DataBind();
}
protected string cRenderLine(object oItem)
{
return oItem.ToString();
}
其他方法是使用虚拟 ListView,这意味着在页面上滚动时显示数据 - 我已经给出了这个答案的示例 -> Virtual Listview for ASP.net?
我处理大量学生的考试数据以显示学生成绩。虽然它似乎有效,但显示结果需要更长的时间。时间每天都在增加。
- 我有一个问题 table (tblQuestions) 来存储问题和正确答案。
- 我有一个测试实例 table (tblTestInstance),它存储学生给出的每个测试的测试实例。
- 我拥有的最大 table 是 tblTestDetails,它存储学生选择的问题 ID 和选项。
我将 GridView 与学生绑定 table 并且在 GridView 的数据绑定事件中,我为每个学生计算学生尝试的每个问题的正确答案。我计算数据里面的数据table.
问题是:处理结果需要几分钟时间。
必需建议:我想逐行绑定 gridview(每行一旦单个结果准备就绪)而不是一次加载所有计算结果。
我试过的方法:我使用了带有定时器控制的更新面板。在几秒钟的间隔内,我尝试重新加载我的数据table,但它仍然一起显示结果。
有什么建议吗。我正在使用 ASP.NET Web 表单。
编辑: 我想逐行显示结果。我的意思是当第一行准备就绪时,它应该显示在用户的屏幕上。这不会提高我知道的性能,但我希望用户在屏幕上看到一些东西,而不是等待所有行都准备好。
例如,如果 class 有 1000 名学生,他们每人进行了 150 个或更多问题的测试,那么评估答案需要更长的时间。
我目前使用的方法 我从数据库中拉学生,并绑定网格视图 对于每个学生,我拉出测试实例,然后是问题集 对于每个问题,我都会使用问题的 table 来评估答案 计算分数后,我会显示它们。
一个技巧是使用 Response.Flush();
这里有一个例子
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Item" >
<ItemTemplate>
<%#cRenderLine(Container.DataItem)%>
<%
// show every 10 lines what I have
if (++cLine % 10 == 0)
{
Response.Flush();
// simulate the delay here
// System.Threading.Thread.Sleep(1000);
}
%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
以及后面的代码。
public int cLine = 0;
List<int> oMainIds = new List<int>();
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10000; i++)
{
oMainIds.Add(i);
}
GridView1.DataSource = oMainIds;
GridView1.DataBind();
}
protected string cRenderLine(object oItem)
{
return oItem.ToString();
}
其他方法是使用虚拟 ListView,这意味着在页面上滚动时显示数据 - 我已经给出了这个答案的示例 -> Virtual Listview for ASP.net?