2010-11-12 75 views
1

我在ASP.NET中維護一個動態生成的表,它允許用戶在表中上下移動項目。這在幕後實質上是做什麼的,只是交換表格排序的'sortorder'。我檢查一行是否是第一/最後一列,如果是這樣,只顯示上/下(無論什麼相關)。在動態創建的表中移動行無效(ASP.NET/LINQ/C#)

一個問題現在悄悄出現,我不知道爲什麼。出於某種原因,大部分時間(並非所有時間都是奇怪的)上下按鈕不起作用。以'Up'爲例,當前記錄確實設置爲'above'rows sortorder,但'above'行不採用下面的行排序順序。

現在我已經在我的代碼中設置了我的斷點,奇怪的是一切都設置好了。就在我調用SubmitChanges()到LINQ數據上下文時,它似乎把錯誤的值放入數據庫中。

另外有什麼奇怪的是,我認爲,如果你再次點擊它,它實際上工作。但由於該數字仍然存在,它無法正常工作。

這裏是我的代碼:

if (Request.QueryString["dir"] != null) { 
    if (Request.QueryString["dir"] == "up") { 
     var currentrecordup = (from s in dc.InvoiceItems 
      where Request.QueryString["val"] == s.id.ToString() 
      select s).Single(); 
     int valsortidup = (int)currentrecordup.sortorder; 
     var prevrecordup = (from s in dc.InvoiceItems 
      where s.sortorder < valsortidup 
      orderby s.sortorder descending 
      select s).First(); 
     int prevsortidup = (int)prevrecordup.sortorder; 
     int tempval = valsortidup; 
     currentrecordup.sortorder = prevsortidup; 
     prevrecordup.sortorder = tempval; 
    } 
    else if (Request.QueryString["dir"] == "down") { 
     var currentrecorddown = (from s in dc.InvoiceItems 
      where Request.QueryString["val"] == s.id.ToString() 
      select s).Single(); 
     int valsortiddown = (int)currentrecorddown.sortorder; 
     var nextrecorddown = (from s in dc.InvoiceItems 
      where s.sortorder > valsortiddown 
      orderby s.sortorder ascending 
      select s).First(); 
     int nextsortiddown = (int)nextrecorddown.sortorder; 
     int tempvaldown = valsortiddown; 
     currentrecorddown.sortorder = nextsortiddown; 
     nextrecorddown.sortorder = tempvaldown; 
    } 
    dc.SubmitChanges(); 
    Response.Redirect("EditInvoice.aspx?id=" + Request.QueryString["id"]); 
} 

如果它的任何幫助,在我的表中的排序順序列是一個int字段允許空值。謝謝

回答

0

非常非常愚蠢的問題。不檢查列中的行是否是同一個'invoiceid'的項 - duh!