Установка DataSourceId GridView в "" приводит к потере GridView - PullRequest
0 голосов
/ 15 апреля 2009



Если я привяжу 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 () (и все еще доступны, например, внутри обработчика событий, подписанного на событие, которое вызвало обратную передачу) ?!

Ответы [ 2 ]

4 голосов
/ 15 апреля 2009

Ваш элемент управления не будет повторно привязываться к данным ViewState, если вы установите DataSourceID в null или пустую строку. Статья, которую я привел ниже, имеет отличное объяснение, почему.

В основном происходит, когда вы установили DataSourceID на null или пустую строку, элемент управления воспринимает это как указание потребителя элемента управления, что он вообще не хочет связывать какие-либо данные даже данные ViewState). Элемент управления проверяет DataSourceID перед привязкой, и если это пустая строка, он не DataBind в своем методе EnsureDataBound.

System.What ?: DataSource VS. DataSourceID (внутренние)

1 голос
/ 15 апреля 2009

Я предполагаю, что Framework осознает эта пустая строка или нулевая ссылка не указывает ни на один из источников данных и, следовательно, не будет удалять любые данные GridView извлечен из предыдущих данных источник

Почему вы так думаете, вы сбрасываете значение, конечно, girdview должен связывать новое значение, которое вы сбрасываете.

...