如何在PostBack之后保留网格数据源

时间:2011-11-06 15:15:15

标签: c# asp.net anonymous-types web-controls

我已经编写了自定义网格视图,我想在DataSource中保存网格ViewState,但我得到了此异常

  

输入'<> f__AnonymousType0`7 [[System.Int32,mscorlib,Version = 2.0.0.0,   Culture = neutral,PublicKeyToken = b77a5c561934e089],[System.String,   mscorlib,版本= 2.0.0.0,文化=中性,   PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,   版本= 2.0.0.0,文化=中立,   PublicKeyToken = b77a5c561934e089],[System.Boolean,mscorlib,   版本= 2.0.0.0,文化=中立,   PublicKeyToken = b77a5c561934e089],[System.String,mscorlib,   版本= 2.0.0.0,文化=中立,   PublicKeyToken = b77a5c561934e089],[System.Int32,mscorlib,   版本= 2.0.0.0,文化=中立,   PublicKeyToken = b77a5c561934e089],[System.Int32,mscorlib,   Version = 2.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]'   在Assembly'ExtAspNet.Examples,Version = 1.0.0.0,Culture = neutral,   PublicKeyToken = null'未标记为可序列化

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

2 个答案:

答案 0 :(得分:1)

您尝试放入视图状态的任何内容都必须使用[Serializable]属性进行修饰,但由于您具有匿名类型,因此无法执行此操作。

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

但请注意,在会话中放入大量数据也不具备可扩展性或良好做法,您必须根据数据大小以及从数据中获取数据所需的时间来确定您的数据。后端商店。您是否已经测量了获取数据的成本,例如,您是否可以使用Cache而不是Session?

答案 1 :(得分:0)

如果您使用数据表绑定gridview数据源,可以这样做....

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

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

喝彩!