gpt4 book ai didi

c# - 如何优化 GridView 生成的 ViewState 并保留一些 GridView 相关的功能

转载 作者:太空狗 更新时间:2023-10-30 01:08:38 26 4
gpt4 key购买 nike

关注this post与使用具有完整 ViewState 的 GridView 时相比,我将 ViewState 的大小减少了 5 倍。

基本上,这是优化 ViewState 的代码:

public void DisableViewState(GridView dg)
{
foreach (GridViewRow gvr in dg.Rows)
{
gvr.EnableViewState = false;
}
}

private void Page_Load(object sender, System.EventArgs e)
{
if (!Page.IsPostBack)
{
GridView1.DataSource = GetData();
GridView1.DataBind();
DisableViewState(GridView1);
}
}

通过这样做,我仍然能够使用 GridView 的排序和分页功能。

但是,当在 GridView 中使用链接时,它的行为与它具有完整 ViewState 时的行为不同,因为服务器代码未获取任何值作为 CommandArgument。以下是 LinkBut​​ton 及其事件处理程序的代码:

<ItemTemplate>
<asp:LinkButton CommandArgument='<%#Eval("idnumber")%>' ID="linkSelect" Text="Select"
runat="server" OnCommand="selectCommand"></asp:LinkButton>
</ItemTemplate>

代码隐藏:

protected void selectCommand(object sender, CommandEventArgs e)
{
int numberID = int.Parse(e.CommandArgument.ToString());
selectCommandInfo(numberID);
}

因此,我在服务器端收到错误,因为它正在尝试将空字符串解析为 int。

那么,在将 GridView 与 LinkBut​​ton 及其事件处理程序一起使用时,如何优化 ViewState?有没有其他方法可以在代码隐藏中获取 CommandArgument 值?

任何帮助将不胜感激。

最佳答案

一个简单的解决方案是更深一层 - 为单元格而不是行禁用 ViewState:

private void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType != DataControlRowType.DataRow)
return;

foreach (TableCell cell in e.Row.Cells)
cell.EnableViewState = false;

e.Row.Cells[0].EnableViewState = true;
e.Row.Cells[1].EnableViewState = true;
}

假设 0 和 1 是包含您的 LinkBut​​tonidnumber 的单元格。

关于c# - 如何优化 GridView 生成的 ViewState 并保留一些 GridView 相关的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8909142/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com