我必须将大量数据加载到动态网格视图中。网格视图具有基于数据动态创建的链接按钮。 单击链接按钮时,应加载内部网格。它工作正常。
但每次单击链接按钮时,都会触发Row绑定事件,以绑定主网格。
在行绑定事件中,内部网格正在加载主网格中已经单击的每一行。我在Session中维护了单击的链接按钮状态(特定行的id字段),并使用会话值,在主网格中的每一行上加载内部网格,该行与网格绑定事件中的会话值匹配。
但加载需要很长时间。是否有其他方法可以在单击链接按钮时将数据绑定到动态网格视图并保持单击的链接按钮内部网格?
我的代码是
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (strCallTypeName[intLoop].ToLower() != "total")
{
LinkButton lnk = new LinkButton();
lnk.Text = ((System.Data.DataRowView)(e.Row.DataItem)).Row[strCallTypeName[intLoop]].ToString();
lnk.CommandArgument = strCallTypeName[intLoop]
+ "|||"
+ ((System.Data.DataRowView)(e.Row.DataItem)).Row["UserId"].ToString()
+ "|||"
+ ((System.Data.DataRowView)(e.Row.DataItem)).Row["Service"].ToString()
+ "|||"
+ e.Row.RowIndex;
//lnk.Click += new EventHandler(lnk_Click);
//lnk.CommandName = "Edit";
lnk.Click += new EventHandler(lnk_Click);
lnk.ToolTip = strCallTypeName[intLoop];
lnk.CssClass = "lnk";
tc.Controls.Add(lnk);
string strUserID =grdSummaryCall.DataKeys[e.Row .RowIndex].Value.ToString();
string strSessionUserDetails = string.Empty;
strSessionUserDetails = (string)Session["GridUserDetails"];
if (strSessionUserDetails != string.Empty && strSessionUserDetails !=null)
{
string[] strSplitUserDetails = strSessionUserDetails.Split(new string[] { "~" }, StringSplitOptions.None);
Panel pnlTable = (Panel)e.Row.FindControl("pnlTable");
for (int i = 0; i < strSplitUserDetails.Length; i++)
{
string[] strUserDetails = strSplitUserDetails[i].Split(new string[] { "," }, StringSplitOptions.None);
if (strUserID == strUserDetails[1].ToString())
{
if (pnlTable.Visible == false)
{
GetUserCallDetails(strUserDetails, e.Row);
pnlTable.Visible = true;
}
}
}
}
}
}
答案 0 :(得分:1)
Pooja,基于你上面的评论,我会确保分页按预期工作,你是:
1 - 仅每次为当前页面加载30条记录,而非所有这些记录和渲染 只有30岁。
2 - NOT 再次为每个行绑定调用数据库层;在加载当前页面的数据时,您可以一次加载页面每一行的所有详细信息(因此不超过页面大小,在您的情况下为30),因此您的数据库调用将降至每页1而不是1在你的情况下,+ pagesize == 31。