2016-01-22 68 views
1

我有一個下拉列表框中的複選框。可以說我有下列數據顯示在下拉列表中:如何保持列表中的數據順序

<select multiple="multiple" name="Products" id="Products"> 
    <option value="1">A</option> 
    <option value="2">B</option> 
    <option value="3">C</option> 
    <option value="4">D</option> 
</select> 

然後我檢查記錄沒有4,2,3,並提交頁面。在控制器中,我將int[] arrIDs更改爲List<int> listIDs以從數據庫中收集產品。

List<Product> products = db.Product 
    .Where(d => listIDs.Contains(d.ProductID)) 
    .ToList(); 

但我已經得到了products中排序如下順序2,3,4,我想保持基於我在第4頁,2,3所選擇的記錄的序列。如何解決它?

+0

* *「order」*您的意思是*「在UI中選擇產品的順序」*? –

+0

@ArghyaC是的,你是對的 – Willy

+0

你的'List listIDs'中的序列是否正確? –

回答

3

您可以使用List.IndexOf獲得訂單的指數:

List<Product> products = db.Product 
    .Where(d => listIDs.Contains(d.ProductID)) 
    .AsEnumerable() 
    .OrderBy(d => listIDs.IndexOf(d.ProductID)) 
    .ToList(); 
+0

正確,非常感謝你 – Willy

0

你需要做一個GroupJoin

List<Product> products = listIDs 
    .GroupJoin(
     db.Product, 
     x => x, 
     y => y.ProductID, 
     (x, ys) => ys.First()) 
    .ToList(); 

執行對「左外連接相當於」,這以原始順序維護listIDs的值,然後將每個listID與表中的相應產品進行匹配。

注意:此代碼假定數據庫中始終存在單個匹配的ProductID

1

多選框不保留點擊順序。

您需要使用Javascript才能觀看點擊,並將訂單記錄到隱藏字段中,該字段將隨表單提交。或者放棄多選框,並使用this one等組件。 (這不是一個.NET組件,但我懷疑存在類似的組件。)

+0

這正是我正在寫的東西...... –

+0

他已經在照顧,但沒有正確提及。 –

+0

對不起,如果我錯過了,謝謝大家 – Willy

相關問題