2012-01-19 110 views
-1

在我的.NET Web窗體頁面中,我有一個ListBox和一些允許我對項目進行排序的jQuery。我選擇了幾個項目,然後遍歷它們以保存到我的數據庫。我想保存項目排序的順序,但是,我無法使其正常工作。我隱藏顯示:無法按排序順序保存列表框項目

protected void session_DetailsView_ItemUpdating(object sender, DetailsViewUpdateEventArgs e) 
    { 
     panel_SqlDataSource.Delete(); 
     ListBox panel_ListBox = session_DetailsView.FindControl("panel_ListBox") as ListBox; 
     int so = 0; 
     for (int i=0; i < panel_ListBox.Items.Count; i++) 
     { 
      if (panel_ListBox.Items[i].Selected == true) 
      { 
       so++; 
       panel_SqlDataSource.InsertParameters["presenterID"].DefaultValue = panel_ListBox.Items[i].Value; 
       panel_SqlDataSource.InsertParameters["sortOrder"].DefaultValue = so.ToString(); 
       panel_SqlDataSource.Insert(); 
      } 
     } 
    } 
+0

忘記的時刻的數據庫,應只需跟蹤輸出以確定您是否期望發生的事情正在發生。然後擔心數據庫。 – demoncodemonkey

+1

也粘貼你的jQuery代碼... – demoncodemonkey

回答

0

呀所以您的訂單被客戶端上的變化可能不會影響該命令,它是在服務器上爲很可能會在某個地方的視圖狀態定義。您的控件會在最初顯示時返回。你需要以某種方式跟蹤事物的順序 - 將其從表單變量或其他任何東西中拉出來。

0

ASP .Net不知道ListBox中的項目在客戶端已更改的事實。可能您正在使用jQuery.sortable方法對列表框項進行排序。您需要使用「serialize」選項調用sortable並將該值保存到隱藏字段中。當您發佈表單時,您會讀取該隱藏字段的值,並將新訂單保存到數據庫中。

因此,對於樣品,如果有ID爲1,2的對象,3有新的訂單2,3,1然後創建更新/插入方法是這樣的:

update tbl set sortOrder = 1 where presenterId = 2 
update tbl set sortOrder = 2 where presenterId = 3 
update tbl set sortOrder = 3 where presenterId = 1