Как сохранить сетку DataSource после PostBack - PullRequest
0 голосов
/ 06 ноября 2011

Я написал собственный вид сетки и хочу сохранить сетку DataSource в ViewState, но получил это исключение

Тип '<> f__AnonymousType0`7 [[System.Int32, mscorlib, Версия = 2.0.0.0, Культура = нейтральная, 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, Версия = 2.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089]] ' в сборке 'ExtAspNet.Examples, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = null ' не помечен как сериализуемый .

Теперь я хочу знать, как мне сохранить сетку DataSource?

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

Все, что вы пытаетесь поместить в viewstate, должно быть украшено атрибутом [Serializable], но, поскольку у вас есть анонимный тип, вы не можете это сделать.

Но кроме этого, неделать то, что вы пытаетесь сделать, это значительно увеличит размер вашей страницы и излишне.Во всяком случае, поместите ваш источник данных в Session и перепривязайте его при обратной передаче, но не помещайте его в viewstate.

Обратите внимание, однако, что помещение огромного количества данных в сессию не масштабируется или также не является хорошей практикойвы должны основывать свое решение в зависимости от размера ваших данных и от того, сколько времени потребуется для получения данных из внутреннего хранилища.Вы измерили, как дорого обходятся данные, можете ли вы использовать, например, Cache вместо Session?

0 голосов
/ 06 ноября 2011

если вы связываете свой источник данных gridview с таблицей данных, вы можете сделать это следующим образом ...

Объявите таблицу данных следующим образом, и все будет работать как положено

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

ура!

...