NewValues GridView и OldValues, пустой в событии OnRowUpdating

У меня есть GridView ниже. Я связываю с пользовательским источником данных в коде позади. Это входит в событие "OnRowUpdating" очень хорошо, но нет никакого NewValues или OldValues. Какие-либо предложения относительно того, как я могу получить эти значения?

<asp:GridView   ID="gv_Personnel" 
                        runat="server" 
                        OnRowDataBound="gv_Personnel_DataBind" 
                        OnRowCancelingEdit="gv_Personnel_CancelEdit" 
                        OnRowEditing="gv_Personnel_EditRow" 
                        OnRowUpdating="gv_Personnel_UpdateRow"
                        AutoGenerateColumns="false" 
                        ShowFooter="true" 
                        DataKeyNames="BudgetLineID"
                        AutoGenerateEditButton="true" 
                        AutoGenerateDeleteButton="true"
                        >
            <Columns>                 
                <asp:BoundField HeaderText="Level of Staff" DataField="LineDescription" />
                <%--<asp:BoundField HeaderText="Hrs/Units requested" DataField="NumberOfUnits" />--%>
                <asp:TemplateField HeaderText="Hrs/Units requested">
                    <ItemTemplate>
                        <%# Eval("NumberOfUnits")%>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox ID="tb_NumUnits" runat="server" Text='<%# Bind("NumberOfUnits")%>' />
                    </EditItemTemplate>
                </asp:TemplateField>
                <asp:BoundField HeaderText="Hrs/Units of Applicant Cost Share" DataField="" NullDisplayText="0" />
                <asp:BoundField HeaderText="Hrs/Units of Partner Cost Share" DataField="" NullDisplayText="0" />
                <asp:BoundField FooterStyle-Font-Bold="true" FooterText="TOTAL PERSONNEL SERVICES:" HeaderText="Rate" DataFormatString="{0:C}" DataField="UnitPrice" />
                <asp:TemplateField HeaderText="Amount Requested" ItemStyle-HorizontalAlign="Right" FooterStyle-HorizontalAlign="Right"  FooterStyle-BorderWidth="2" FooterStyle-Font-Bold="true"/>
                <asp:TemplateField HeaderText="Applicant Cost Share" ItemStyle-HorizontalAlign="Right" FooterStyle-HorizontalAlign="Right" FooterStyle-BorderWidth="2" FooterStyle-Font-Bold="true"/>
                <asp:TemplateField HeaderText="Partner Cost Share" ItemStyle-HorizontalAlign="Right" FooterStyle-HorizontalAlign="Right" FooterStyle-BorderWidth="2" FooterStyle-Font-Bold="true"/>
                <asp:TemplateField HeaderText="Total Projet Cost" ItemStyle-HorizontalAlign="Right" FooterStyle-HorizontalAlign="Right" FooterStyle-BorderWidth="2" FooterStyle-Font-Bold="true"/>
            </Columns>
        </asp:GridView>
9
задан Abe Miessler 12 March 2010 в 01:12
поделиться

2 ответа

Что касается проблемы с событием RowUpdating элемента управления GridView, это ожидаемое поведение, потому что когда мы делаем {{1} } не связывать GridView (или другой элемент управления привязкой данных ASP.NET 2.0) с элементом управления DataSource, он не будет автоматически запрашивать и заполнять коллекцию параметров для события обновления / удаления / .... В таких случаях нам необходимо вручную извлечь значения поля из элемента управления Template .

Об этом говорит сотрудник Microsoft в здесь .

В этом случае вы можете сделать это с помощью метода ExtractValuesFromCell , чтобы самостоятельно создать коллекцию NewValues.

РЕДАКТИРОВАТЬ:

Я нашел фрагмент кода в комментариях этого блога:

protected void OnRowEditing(object sender, GridViewEditEventArgs e)
{     
       GridView gv = (GridView)sender;
       gv.EditIndex = e.NewEditIndex;
       gv.DataBind();
       ...
}

protected void OnRowUpdating(object sender, GridViewUpdateEventArgs e)
{
   GridView gv = (GridView)sender;
   for (int i = 0; i < gv.Columns.Count; i++)
   {
      DataControlFieldCell cell = gv.Rows[e.RowIndex].Cells[i] as DataControlFieldCell;
      gv.Columns[i].ExtractValuesFromCell(e.NewValues, cell, DataControlRowState.Edit, true);
   }
   // now you can use NewValues collection normally
}

Не тестировал его, но, похоже, решил проблему, дайте мне знать, если да.

4
ответ дан 4 December 2019 в 15:15
поделиться

Я не уверен, поможет ли это .. но это то, что я нашел на сайте msdn

Коллекции ключей, старых и новых значений - это автоматически заполняется только тогда, когда элемент управления GridView привязан к данным с помощью свойства DataSourceID.

6
ответ дан 4 December 2019 в 15:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: