2013-04-04 85 views
0

我遇到了一個不好的情況與jqGrid更新和刪除jqGrid不工作

我使用的asp.net 4.0與jqGrid添加到.aspx頁面。按照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添加一行,它起作用了!

然後,當我嘗試編輯/刪除特定的行,它結束了徒勞。編輯/更新和刪除功能無效。

即使我已經在codebehind中添加了rowdeleting以檢查我是否獲取了合適的數據。

當我把一個調試器在{電子我可以看到被選中的記錄時,是即將到來的數據,我用的jQGrid

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

     } 

屬性增加了以下功能。

當我添加一行時,它會將其添加到jqGrid以及數據庫。這很好用!

爲什麼它不從數據庫或甚至從jqGrid中刪除?

這是我設置的SqlDataSourceUpdateCommand/DeleteCommand的錯嗎?還是我需要設置額外的功能來代表jqGrid實現這些東西?

注意:當我可以在CodeBehind文件中的RowDeleting方法中看到選定的數據時,我可以通過添加一些ado.net代碼來顯式刪除它。如果有任何可用於jqGrid的解決方案,請發佈。

感謝您的意見/答覆貼。

編輯

我發現這個問題,當我運行SQL事件探查器。

當我編輯我的表格編輯colum,沒有id被傳遞給它。 這裏是我的SQL事件探查了

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值?

+0

在你的UpDateCommand和DeleteCommand中,你有'SQL命令'設置..?也許你應該創建一個默認命令,然後用你實際的'Sql命令'重寫該命令,這很難說,因爲看看你的'.aspx'標記我看不到這些命令的樣子 – MethodMan 2013-04-04 15:02:22

回答

1

我自己並沒有使用jqGrid/jqSuite的商業版本,但我猜測你應該在CompanyId列的定義中加上key: true。看來它對應於trirand:JQGridColumn列中的值PrimaryKey=true的定義。

+0

+1現在感謝刪除工作但更新不起作用。你可以請現貨嗎? – 2013-04-04 15:24:36

+0

@karthik:對不起,我寫過我自己不使用jqSuite。我可以推薦你去調試這個問題。你看到一些錯誤信息嗎?您可以啓動「SQL Server Profiler」來跟蹤將要執行的所有SQL語句。更新是否產生在SQL Server上執行的一些(錯誤的)UPDATE語句或什麼也沒有發生?您應該以某種方式調試問題。我只使用原始的開源jqGrid來確切地知道要做什麼,並且能夠輕鬆地調試每一站。 – Oleg 2013-04-04 15:32:24

+0

好的,謝謝你的時間。我會研究這個問題。 – 2013-04-04 15:47:52