【问题标题】:Is InsertMethod broken when using ASPxGridView and ObjectDatasource with a custom EditForm?将 ASPxGridView 和 ObjectDatasource 与自定义 EditForm 一起使用时,InsertMethod 是否损坏?
【发布时间】:2011-08-31 22:07:00
【问题描述】:

我有一个 ASPxGridView,目前是 11.1.7.0,我用 ObjectDatasource 填充它。在我使用自定义编辑表单之前,一切都按预期工作。在另一个控件中,我通过使用 aspxgridview 控件中的 OnRowInserting 属性解决了这个问题,但我不喜欢这样,因为与使用 objectdatasource 相比,它是额外的工作。

代码看起来像这样。

<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 属性始终为空。

这是一个错误吗?有没有解决的办法?我错过了什么吗?

谢谢。

【问题讨论】:

    标签: asp.net data-binding devexpress aspxgridview


    【解决方案1】:

    必须使用Two-Way data-binding 技术将模板编辑器与DataItem 的字段绑定:

    <dx:ASPxTextBox ID="FirstName" runat="server" Text='<%#Bind("FirstName")%>' />
    

    【讨论】:

    • 这是正确的,他们有一些例子证明了这一点! :)
    【解决方案2】:

    根据以下问题,指定 TypeName="UserData" 可能会导致问题。

    ObjectDataSource not calling Insert method when it has extra parameters

    尝试从 asp:ObjectDataSource 中删除它,看看 ItemInsert 方法是否有效。

    【讨论】:

    • 嗯,不是真的,TypeName 是对 objectdatasource 应该与之通信的 Class 的引用。因此,TypeName="UserData" 和 SelectMethod="GetItems" 意味着它应该从 UserData 类的 GetItems 方法中选择数据。
    猜你喜欢
    • 2012-12-02
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多