Не работает ли InsertMethod при использовании ASPxGridView и ObjectDatasource с пользовательской EditForm? - PullRequest
1 голос
/ 01 сентября 2011

У меня есть ASPxGridView, в настоящее время 11.1.7.0, который я заполняю ObjectDatasource. Все работает как положено, пока я не использую пользовательскую форму редактирования. В другом элементе управления я решил эту проблему, используя атрибут OnRowInserting в элементе управления aspxgridview, но мне это не нравится, поскольку это дополнительная работа по сравнению с использованием источника данных объекта.

Код выглядит примерно так.

<dx:ASPxGridView ID="ASPxGridView1" runat="server" 
    ClientIDMode="AutoID" 
    AutoGenerateColumns="False"
    KeyFieldName="UserId" 
    DataSourceID="ObjectDataSource1"
    ClientInstanceName="grid" 
    onhtmleditformcreated="AsPxGridView1HtmlEditFormCreated">

    <SettingsEditing PopupEditFormWidth="600" PopupEditFormModal="true" Mode="EditForm" />

    <Templates>
        <TitlePanel>
            <dx:ASPxButton ID="New" runat="server" Text="Ny användare" ClientInstanceName="New" AutoPostBack="false">
                <ClientSideEvents Click="function (s, e) { grid.AddNewRow(); }" />
            </dx:ASPxButton>
        </TitlePanel>

        <EditForm>
            First Name: <dx:ASPxTextBox ID="FirstName" runat="server" />
            <dx:ASPxGridViewTemplateReplacement ID="UpdateButton" ReplacementType="EditFormUpdateButton" runat="server" />
            <dx:ASPxGridViewTemplateReplacement ID="CancelButton" ReplacementType="EditFormCancelButton" runat="server" />
        </EditForm>
    </Templates>

    <Columns>
        <dx:GridViewDataTextColumn FieldName="UserId" VisibleIndex="0" />
        <dx:GridViewDataTextColumn FieldName="FirstName" VisibleIndex="2" />
        <dx:GridViewDataTextColumn FieldName="LastName" VisibleIndex="3" />
    </Columns>
</dx:ASPxGridView>

<asp:ObjectDataSource 
    ID="ObjectDataSource1" 
    TypeName="UserData" 
    SelectMethod="GetItems"
    UpdateMethod="ItemUpdate" 
    InsertMethod="ItemInsert" 
    DeleteMethod="ItemDelete"
    runat="server">
        <InsertParameters>
            <asp:Parameter Name="FirstName" Type="String"/>
        </InsertParameters>
</asp:ObjectDataSource>

И объект UserData

public class UserData
{
    public List<TblProUserData> GetItems()
    {
        var tblProUserData = new TblProUserData();
        tblProUserData.Fill();

        return tblProUserData.List;
    }

    public void ItemDelete(int userId)
    { }

    public void ItemUpdate()
    { }

    public void ItemInsert(string FirstName)
    {
        // This method gets called, but the FirstName is null.
    }
}

Проблема в том, что вызывается ItemInsert, но атрибут FirstName всегда равен нулю.

Это ошибка? Это можно обойти? Я что-то пропустил?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 02 сентября 2011

Необходимо использовать метод Двухстороннее связывание данных , чтобы связать редакторы шаблонов с полями DataItem:

<dx:ASPxTextBox ID="FirstName" runat="server" Text='<%#Bind("FirstName")%>' />
0 голосов
/ 01 сентября 2011

Исходя из следующего вопроса, указание TypeName = "UserData" может быть причиной проблемы.

ObjectDataSource не вызывает метод Insert, если у него есть дополнительные параметры

Попробуйтеудалив его из asp: ObjectDataSource и посмотрите, работает ли метод ItemInsert.

...