0

我遇到了一个糟糕的情况jqGrid

我正在使用将 jqGrid 添加到 .aspx 页面的 asp.net 4.0。为了这个目的add/edit/delete我使用的数据。SqlDataSource

我已经像这样配置了 default.aspx 页面:

链接:

<link rel="stylesheet" type="text/css" media="screen" href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.10.0/themes/redmond/jquery-ui.css" />
    <link href="Styles/ui.jqgrid.css" rel="stylesheet" type="text/css" />
    <script src="Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
    <script src="Scripts/i18n/grid.locale-en.js" type="text/javascript"></script>
    <script src="js/trirand/jquery.jqGrid.min.js" type="text/javascript"></script>

在我的表单中,我有这样的 SqlDataSource 和 trirand jqGrid:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:Test_1ConnectionString %>"
        SelectCommand="SELECT * FROM [Companies]" 
        UpdateCommand="UPDATE [Companies] SET [CompanyType] = @CompanyType,[Country] = @Country,[State] = @State,[ZipCode] = @ZipCode WHERE [CompanyId] = @CompanyId"
        InsertCommand="INSERT INTO [Companies]([CompanyType],[Country],[State],[ZipCode]) VALUES (@CompanyType,@Country,@State,@ZipCode)" 
        DeleteCommand="DELETE FROM [Companies] WHERE [CompanyId] = @CompanyId">
        <DeleteParameters>
            <asp:Parameter Name="CompanyId" Type="Int32"/>
        </DeleteParameters>
        <InsertParameters>
            <asp:Parameter Name="CompanyType" Type="String" />
            <asp:Parameter Name="Country" Type="String" />
            <asp:Parameter Name="State" Type="String" />
            <asp:Parameter Name="ZipCode" Type="String" />
        </InsertParameters>
        <UpdateParameters>
            <asp:Parameter Name="CompanyType" Type="String" />
            <asp:Parameter Name="Country" Type="String" />
            <asp:Parameter Name="State" Type="String" />
            <asp:Parameter Name="ZipCode" Type="String" />
            <asp:Parameter Name="CompanyId" Type="Int32" />
        </UpdateParameters>
    </asp:SqlDataSource>
    <trirand:JQGrid ID="jQGrid1" DataSourceID="SqlDataSource1" runat="server" AppearanceSettings-Caption="Company Details"
        AppearanceSettings-ShowCaptionGridToggleButton="true" 
        onrowdeleting="jQGrid1_RowDeleting">
        <Columns>
            <trirand:JQGridColumn DataField="CompanyId" Searchable="true" />
            <trirand:JQGridColumn DataField="CompanyType" Editable="true" />
            <trirand:JQGridColumn DataField="Country" Editable="true" />
            <trirand:JQGridColumn DataField="State" Editable="true" />
            <trirand:JQGridColumn DataField="ZipCode" Editable="true" />
        </Columns>
        <EditDialogSettings Modal="true" CloseAfterEditing="true" SubmitText="Submit Details"
            Caption="Edit Company" />

        <SearchDialogSettings Modal="true" FindButtonText="Search Company" />
        <ToolBarSettings ShowEditButton="true" ShowAddButton="true" ShowDeleteButton="true" ShowInlineAddButton="true"
            ShowSearchButton="true" ShowRefreshButton="true" />
    </trirand:JQGrid>

一切看起来都很好,直到我调查了正在发生的事情的功能。

起初我试图在 中添加一行jqGrid,它有效!

然后,当我尝试编辑/删除特定行时,它以徒劳的方式结束。编辑/更新和删除功能不起作用。

即使我已经在代码隐藏中添加了行删除来检查我是否获得了适当的数据。

我使用以下属性添加了以下功能jQGrid

protected void jQGrid1_RowDeleting(object sender, Trirand.Web.UI.WebControls.JQGridRowDeleteEventArgs e)
        {

        }

当我在{ei 放置一个调试器时,可以看到选择记录时即将到来的数据。

当我添加一行时,它会将其添加jqGrid到数据库中。这很好用!

为什么它不从 db 甚至从 jqGrid 中删除?

这是我设置的UpdateCommand/DeleteCommand的错吗?SqlDataSource还是我需要设置额外的功能来代表 jqGrid 实现这些东西?

注意:当我可以在 CodeBehind 文件中看到在 RowDeleting 方法中选择的数据时,我可以通过添加一些 ado.net 代码来显式删除它。如果有任何可用的解决方案可以使用 jqGrid,请发布。

感谢您发布的评论/答案。

编辑

我在运行 Sql Profiler 时发现了问题。

当我用表单编辑编辑我的列时,没有 id 被传递给它。这是我的 sql profiler 得到的

    exec sp_executesql N'UPDATE [Companies] SET [CompanyType] = @CompanyType,[Country] = @Country,

[State] = @State,[ZipCode] = @ZipCode WHERE [CompanyId] = @CompanyId',N'@CompanyType nvarchar

(7),@Country nvarchar(3),@State nvarchar(5),@ZipCode nvarchar(4000),@CompanyId nvarchar

(4000)',@CompanyType=N'pvt',@Country=N'abc',@State=N'def',@ZipCode=NULL,*@CompanyId=NULL*

但是当我使用内联编辑选项编辑 jqGrid 中的列时,我可以看到我的 CompanyId 不为空。

    exec sp_executesql N'UPDATE [Companies] SET [CompanyType] = @CompanyType,[Country] = @Country,

[State] = @State,[ZipCode] = @ZipCode WHERE [CompanyId] = @CompanyId',N'@CompanyType nvarchar

(7),@Country nvarchar(3),@State nvarchar(5),@ZipCode nvarchar(4000),@CompanyId nvarchar

(4000)',@CompanyType=N'pvt',@Country=N'abc',@State=N'def',@ZipCode=NULL,*@CompanyId=3*

有人可以指出为什么内联查询传递 id 列以及为什么表单编辑不传递 id 值?

4

1 回答 1

1

我自己不使用商业版的 jqGrid/jqSuite,但我尝试猜测你应该添加key: trueCompanyId列的定义中。似乎它对应PrimaryKey=truetrirand:JQGridColumn列定义中的值。

于 2013-04-04T15:12:53.790 回答