Если я привяжу GridView к SqlDataSource, то будет создана первая страница, и GridView отобразит столбцы, полученные из источника данных. Но если при обратной передаче я установил для GridView.DataSourceID значение NULL или пустую строку
protected void Page_Load(object sender, EventArgs e)
{
...
if (IsPostBack)
GridView1.DataSourceID = "";
...
}
, тогда GridView вообще не будет отображать никаких строк. Но почему это так?
Предполагая, что для GridView для EnableViewstate установлено значение true, он должен иметь возможность отображать строки, полученные из источника данных при первом создании страницы!
Я понимаю, что можно утверждать, что Framework замечает, что DataSourceId изменился, и предполагает, что GridView не нужны данные из предыдущего источника данных, но я предполагаю, что Framework поймет, что пустая строка или нулевая ссылка не указывает ни на один из источников данных и, таким образом, не удалит ли GridView данные, полученные из предыдущего источника данных ?!
спасибо
EDIT:
Привет,
В основном, когда вы устанавливаете DataSourceID в значение null или в пустую строку, элемент управления принимает это как указание потребителя элемента управления, что он вообще не хочет связывать какие-либо данные (даже данные ViewState) , Элемент управления проверяет DataSourceID перед привязкой и, если это пустая строка, он не связывает DataBind в своем методе EnsureDataBound.
Таким образом, если вы установите нулевой DataSourceID внутри Page_Load (), но GridView проверяет только моменты DataSourceId перед привязкой (что происходит много после Page_Load), то до тех пор, пока не проверен DataSourceId, ViewState, содержащий данные из предыдущего источника данных, все еще должен быть доступен внутри Page_Load () (и все еще доступны, например, внутри обработчика событий, подписанного на событие, которое вызвало обратную передачу) ?!