繁体   English   中英

回发后如何保持网格数据源

[英]How to keep grid DataSource after PostBack

我已经编写了一个自定义网格视图,我想将网格DataSource保存在ViewState但是出现了这个异常

类型'<> f__AnonymousType0`7 [[System.Int32,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089 ],[System.String,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.Boolean,mscorlib,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.String ,mscorlib,版本= 2.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089],[System.Int32,mscorlib,版本= 2.0.0.0,文化=中性,PublicKeyToken = b77a5c561934e089],[System.Int32,mscorlib,版本= 2.0 .0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]”中的程序集“ ExtAspNet.Examples,版本= 1.0.0.0,Culture = neutral,PublicKeyToken = null” 未标记为可序列化

现在,我想知道如何保留网格DataSource

您尝试放入viewstate中的任何内容都必须使用[Serializable]属性进行修饰,但是由于您具有匿名类型,因此无法做到这一点。

但是除此之外,不要做您想做的事情,它会大大增加不必要的页面大小。 如果有的话,将您的数据源放入Session并在回发时重新绑定,但不要将其放在viewstate上。

但是请注意,将大量数据放入会话中既不可扩展,也不是一个好习惯,但您必须根据数据的大小以及从后端存储中获取数据所花费的时间来做出决定。 您是否测量了获取数据的成本,例如可以使用Cache代替Session?

如果您将gridview数据源与数据表绑定,则可以这样做。

声明数据表,如下所示,一切将按预期工作

    private string _theDataTable="theDataTable";
    private DataTable theDataTable
    {
            get
            {
                    if(ViewState[_theDataTable]==null)
                            return new DataTable();
                    return (DataTable)ViewState[_theDataTable];
            }
            set
            {
                    ViewState[_theDataTable] = value;
            }
    }

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM