Когда Gridview имеет нулевой источник данных? - PullRequest
1 голос
/ 01 декабря 2010

Я прочитал несколько источников, в которых говорится, что в Gridview не сохраняется свойство Gridview.DataSource при обратной передаче. Насколько я понимаю, в терминах ASP.NET постбэк - это любая загрузка страницы, которая не является первой загрузкой страницы (см. MSDN ).

У меня ситуация с двумя очень похожими сетками.

GvOne.DataSource недействителен при обратной передаче.
GvTwo.DataSource НЕ является нулевым при обратной передаче.

Единственным большим отличием от нескольких отличающихся столбцов является то, что GvOne заполнен Entity Framework и LINQ. GvTwo заполняется таблицей данных, заполненной SqlDataAdapter.

Кроме того, GvOne и GvTwo имеют TemplateField с TextBox, который я использую для сбора пользовательского ввода. Оба используют один и тот же код для извлечения TextBox.Text при обратной передаче:

TextBox tb = (TextBox)GvOne.Rows[i].FindControl("actualTxt");

GvOne правильно собирает tb.Text. GvTwo всегда находит значение tb.Text равным 0 .

Базовый код Gridview:

<asp:GridView ID="GvOne" runat="server" AutoGenerateColumns="False">
        <Columns>
        <asp:TemplateField HeaderText="Return">
   <ItemTemplate>
   <asp:TextBox id="actualTxt" runat="server" Text='0' Width="40px"></asp:TextBox>
   </ItemTemplate>      
       </asp:TemplateField> 
         ...
        </Columns>
</asp:GridView>

<asp:GridView ID="GvTwo" runat="server" AutoGenerateColumns="False">
        <Columns>
        <asp:TemplateField HeaderText="Order">
   <ItemTemplate>
   <asp:TextBox id="actualTxt" runat="server" Text='0' Width="40px"></asp:TextBox>
   </ItemTemplate>      
       </asp:TemplateField> 

         ...
        </Columns>
</asp:GridView>

Изменение GvTwo для использования Entity Framework и LINQ является потенциальным решением, хотя и крупным предприятием. Кто-нибудь знает, что здесь происходит?

ОБНОВЛЕНИЕ (см. Мой комментарий к ответу Джоэла Этертона) В связи с популярным спросом здесь приведен код для заполнения сетки в событии Page_Load для GvTwo (GvOne аналогичен):

   ordersGV.DataSource = dataSetObject.Tables["activeParts"];
    ordersGV.DataBind();

При поиске в коде я не нашел других ссылок на ordersGv.Datasource и других событий, связанных с жизненным циклом страницы.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2010

Gridview не сохраняют источник данных при обратной передаче.Если у вас есть сеточное представление, которое имеет ненулевой источник данных, тогда вы должны заполнять этот источник данных где-то в вашем коде.Было бы поучительно пройтись по циклу событий, чтобы выяснить, где именно происходит заполнение источника данных при обратной передаче.

3 голосов
/ 01 декабря 2010

как выглядит ваш код Page_load?

GridView не сохраняет свойство DataSource заполненным для обратных передач из-за проблем с производительностью

Возможно, второе представление сетки связывает источник данных при обратной передаче?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...