【问题标题】:AspxGridView Specified method is not supported. problem不支持 AspxGridView 指定的方法。问题
【发布时间】:2010-07-12 16:43:26
【问题描述】:

下面是我的 .aspx aspxGridview 语法

 <dx:ASPxGridView ID="ASPxGridView1" runat="server" AutoGenerateColumns="False" 
            KeyFieldName="intProductCode" onrowinserted="ASPxGridView1_RowInserted">
            <Columns>
                <dx:GridViewCommandColumn VisibleIndex="0">
                    <EditButton Visible="True">
                    </EditButton>
                    <NewButton Visible="True">
                    </NewButton>
                    <DeleteButton Visible="True">
                    </DeleteButton>
                </dx:GridViewCommandColumn>
                <dx:GridViewDataTextColumn Caption="intProductCode" FieldName="intProductCode" 
                    VisibleIndex="1">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn Caption="strProductName" FieldName="strProductName" 
                    VisibleIndex="2">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn Caption="SKU" FieldName="SKU" VisibleIndex="3">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn Caption="PACK" FieldName="PACK" VisibleIndex="4">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn Caption="intQtyPerCase" FieldName="intQtyPerCase" 
                    VisibleIndex="5">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn Caption="mnyCasePrice" FieldName="mnyCasePrice" 
                    VisibleIndex="6">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn Caption="intTBQtyPerCase" 
                    FieldName="intTBQtyPerCase" VisibleIndex="7">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataCheckColumn Caption="bIsActive" FieldName="bIsActive" 
                    VisibleIndex="8">
                </dx:GridViewDataCheckColumn>
                <dx:GridViewDataTextColumn Caption="intSortingOrder" 
                    FieldName="intSortingOrder" VisibleIndex="9">
                </dx:GridViewDataTextColumn>
                <dx:GridViewDataTextColumn Caption="strProductAccCode" 
                    FieldName="strProductAccCode" VisibleIndex="10">
                </dx:GridViewDataTextColumn>
            </Columns>
        </dx:ASPxGridView>

下面是我的 C# 语法:

 protected void Page_Load(object sender, EventArgs e)
        {
            if (this.IsPostBack != true)
            {
                BindGridView();
            }
        }

        private void BindGridView()
        {
            DB_OrderV2DataContext db = new DB_OrderV2DataContext();
            var r = from p in db.tblProductInfos
                    select p;
            ASPxGridView1.DataSource = r;
            ASPxGridView1.DataBind();
        }

        protected void LinqServerModeDataSource1_Selecting(object sender, DevExpress.Data.Linq.LinqServerModeDataSourceSelectEventArgs e)
        {
            DB_OrderV2DataContext db = new DB_OrderV2DataContext();
            var r= from p in db.tblProductInfos
                   select p;
            e.QueryableSource = r;


        }

        protected void ASPxGridView1_RowInserted(object sender, DevExpress.Web.Data.ASPxDataInsertedEventArgs e)
        {
            DB_OrderV2DataContext db = new DB_OrderV2DataContext();


            tblProductInfo otblProductInfo = new tblProductInfo ();

            otblProductInfo.intProductCode = (db.tblProductInfos.Max(p => (int?)p.intProductCode) ?? 0) + 1;//oProductController.GenerateProductCode();
            otblProductInfo.strProductName = Convert.ToString(e.NewValues["strProductName"]);
            otblProductInfo.SKU = Convert.ToString(e.NewValues["SKU"]);
            otblProductInfo.PACK = Convert.ToString(e.NewValues["PACK"]);
            otblProductInfo.intQtyPerCase = Convert.ToInt32(e.NewValues["intQtyPerCase"]);
            otblProductInfo.mnyCasePrice = Convert.ToDecimal(e.NewValues["mnyCasePrice"]);
            otblProductInfo.intTBQtyPerCase = Convert.ToInt32(e.NewValues["intTBQtyPerCase"]);
            otblProductInfo.bIsActive = Convert.ToBoolean(e.NewValues["bIsActive"]);
            otblProductInfo.intSortingOrder = (db.tblProductInfos.Max(p => (int?)p.intSortingOrder) ?? 0) + 1;//oProductController.GenerateSortingOrder();

            db.tblProductInfos.InsertOnSubmit(otblProductInfo);//the InsertOnSubmit method called in the preceding code was named Add and the DeleteOnSubmit method was named Remove.
            db.SubmitChanges();
            BindGridView();
            //oProductController.InsertAndSubmit();
           // ASPxGridView1.DataBind();
        }

我的 SQL 语法

CREATE TABLE [dbo].[tblProductInfo](
    [intProductCode] [int] NOT NULL,
    [strProductName] [varchar](100) NULL,
    [SKU] [varchar](50) NULL,
    [PACK] [varchar](50) NULL,
    [intQtyPerCase] [int] NULL,
    [mnyCasePrice] [money] NULL,
    [intTBQtyPerCase] [int] NULL,
    [bIsActive] [bit] NULL,
    [intSortingOrder] [int] NULL,
    [strProductAccCode] [varchar](max) NULL,
 CONSTRAINT [PK_tblProductInfo] PRIMARY KEY CLUSTERED 
(
    [intProductCode] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

当我要插入时,显示错误信息不支持指定的方法。 如何解决。

【问题讨论】:

    标签: asp.net linq-to-objects devexpress


    【解决方案1】:

    当 ASPxGridView 尝试调用其底层数据源的更新(插入、删除)命令时,会显示“不支持指定的方法”错误消息,但未指定此命令。如果无法定义该命令,处理RowUpdating(RowInserting, RowDeleting)事件,手动更新数据源(e.NewValues字典包含输入值),最后将e.Cancel参数设置为true,调用ASPxGridView.CancelEdit方法.

    【讨论】:

    • 请您发送一些语法。我想插入而不是更新,而不是删除。如果我在 rowInserting 方法上设置 e.Cancle=true 则 rowInserted 方法不起作用。
    • 确实,E257 示例展示了如何使用这些事件。为什么需要使用 RowInserted 事件?在您的情况下,不应引发它,所有代码都应在 RowInserting 事件处理程序中实现。
    • 如果您遵循此建议,您最终会得到一个脏网格,数据库已更改但网格未显示新记录
    • 不!网格将显示更新的数据。仅当 ASPxGridView 使用自己的逻辑更新数据库中的数据时,才会引发 RowInserted 事件。由于一切都在 RowInserting 事件中完成并且 e.Cancel 设置为 true,因此网格不会调用其机制,因此不会引发事件。所以,可以肯定的是,建议的方法是绝对正确的。我自己多次使用它。最后,E257 示例也没有使用 RowInserted 事件,一切正常。
    【解决方案2】:

    如果您不打算使用 DataSource 命令,那么您可以使用 Grid RowUpdating 事件并设置 e.Cancel = true 然后调用 grid.CancelEdit() 方法(如上面 DevExpress 团队所述。下面是一个示例:

            void grid_RowUpdating(object sender, DevExpress.Web.Data.ASPxDataUpdatingEventArgs e)
        {
            // Your update logic here.
            e.Cancel = true;
            this.editableGrid.CancelEdit();
        }
    

    【讨论】:

      【解决方案3】:

      您好,您只需确保要插入或更新。在您的插入方法中需要编写 e.cancle=true

      http://community.devexpress.com/forums/p/74138/253467.aspx

      【讨论】:

        【解决方案4】:

        这包含解决方案怎么做。如何做

        http://www.devexpress.com/Support/Center/e/E257.aspx

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-12-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多