Вы упускаете понятие здесь. Это очень элементарный вопрос, на который Google может ответить за вас.
В любом случае, «DataSource» всех элементов управления DataBound будет вести себя только для чтения и будет читать, когда ему необходимо связать элемент управления. Чтобы сохранить данные, вам нужен другой способ. Например, ViewState или Session
ViewState - это как карман для вставки на страницу. Чем больше, тем больше будет загружаться страница, если она больше. Сохраненные вами объекты будут сериализованы в строковые данные. Чем больше объект, тем больше видимость и больше пропускная способность. Имейте в виду, что объект должен быть сериализуемым.
Сессия, как карман для каждого пользователя, и она остается на сервере, значит, быстрее, чем viewstate. Но большая сессия будет занимать больше МБ в оперативной памяти
редактировать
уууууу, ты все еще не понял. Включить ViewState не помогает. давайте посмотрим на структуру.
<html>
<head>
</head>
<body>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="..." />
</body>
</html>
вход является (фактическим) ViewState. Когда вы устанавливаете enable ViewState на WebControls, он будет хранить «некоторые сериализуемые (в основном тип значения)» данные. В вашем случае GridView.EnableViewState означает, что он будет хранить некоторое свойство в своем собственном (логическом) ViewState, а не на странице ViewState.
В коде позади этого. ViewState ["someName"] = ...; это страница ViewState. Давайте посмотрим на серверный код.
this.ViewState["someName"] = somDataTable; // this won't work
this.ViewState["someID"] = "abc"; // this work fine
Поскольку DataTable не имеет ISerializable, для которого viewstate необходимо преобразовать любой объект в строковую базу. Вы можете реализовать свою собственную серилизацию и назначить ее представлению, например, преобразовать DataTable в byte [] и присвоить состоянию просмотра.
попробуйте Session вместо