2009-11-08 70 views
4

我有這樣的代碼如何對ASp.net MVC下拉列表進行排序?

List<SelectListItem> list = new List<SelectListItem>() 
    { 
     new SelectListItem() { Text = "bob", Value = "bob"}, 
     new SelectListItem() { Text = "apple", Value = "apple"}, 
     new SelectListItem() { Text = "grapes", Value = "grapes"}, 
    }; 

這將被用於與asp.net的MVC HTML輔助結合。不過,我想在綁定它之前對它進行排序。我怎麼能這樣做?

+0

這是否對您有所幫助,它從另一個類似的問題:http://stackoverflow.com/questions/188141/c-list-orderby-alphabetical-order – 2009-11-08 23:20:58

+0

沒有SelectListItem沒有實現比較器相同的方式。當我嘗試像這樣分類時,它不喜歡這個。 – chobo2 2009-11-08 23:55:03

回答

9

在這裏你去:

List<SelectListItem> list = new List<SelectListItem>() 
{ 
    new SelectListItem() { Text = "apple", Value = "apple"}, 
    new SelectListItem() { Text = "bob", Value = "bob"}, 
    new SelectListItem() { Text = "grapes", Value = "grapes"}, 
}; 

排序:)

抱歉,無法剋制自己:)

編輯

它看起來好像你需要:

var fruits = new List<string> {"apple", "bob", "grapes"}; 
fruits.Sort(); 
var fruitsSelectList = new SelectList(fruits); 

,然後在視圖

Html.DropDownList("Fruit",fruitsSelectList); 
+4

現在很有趣! – griegs 2009-11-08 23:28:23

+2

這是最快的解決方案:) – LukLed 2009-11-08 23:31:44

+0

我想有人會迴應這個。我知道我可以用手工做,但我可能會在未來增加很多,並計算是否有簡單的方法來排序它會節省我的時間。 – chobo2 2009-11-08 23:54:10

14

如果你可以使用LINQ然後:

list.OrderBy(x => x.Value) 

list.OrderByDescending(x =>x.Value) 

應該這樣做。

編輯

這應該閱讀;

list = list.OrderBy(x => x.Value); 
+0

你的意思是,高效率,全部...... Pshhttt。 :) – Josh 2009-11-08 23:21:54

+0

是的,我的錯誤。對不起 – griegs 2009-11-08 23:23:30

+0

我嘗試過,但它從來沒有爲我排序。儘管我按「文本」排序。我會嘗試「價值」 – chobo2 2009-11-08 23:51:45

2
var sorted = (from li in list 
      orderby li.Text 
      select li).ToList(); 

瞧!

0

你也可以在客戶端使用JavaScript對其進行排序(jQuery的)

順便說一句,如果你知道列表的元素你來就可以對它們進行排序:

List<SelectListItem> list = new List<SelectListItem> { 
new SelectListItem { Text = "apple", Value = "apple"}, 
new SelectListItem { Text = "bob", Value = "bob"}, 
new SelectListItem { Text = "grapes", Value = "grapes"} 
}; 
0

list.Sort

List<SelectListItem> list = new List<SelectListItem>() 

{新SelectListI (){text =「bob」,Value =「bob」},
new SelectListItem(){Text =「apple」,Value =「apple」},
new SelectListItem(){Text =「grapes」,值=「葡萄」},};

list.sort;

+0

List.sort()不起作用。它帶有一個錯誤,它無法對其進行排序。 – chobo2 2009-11-08 23:53:18

-2

-------存儲過程-----(SQL)

USE [Your Database] 
GO 

CRATE PROC [dbo].[GetAllDataByID] 
@ID int 


AS 
BEGIN 
     SELECT * FROM Your_Table 
     WHERE [email protected] 
     ORDER BY Your_ColumnName 
END 

---------- ---------的Default.aspx

<asp:DropDownList ID="ddlYourTable" runat="server"></asp:DropDownList> 

--------- Default.aspx。CS -------

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       List<YourTable> table= new List<YourTable>(); 
       YourtableRepository tableRepo = new YourtableRepository(); 



       int conuntryInfoID=1; 
       table= tableRepo.GetAllDataByID(ID); 

       ddlYourTable.DataSource = stateInfo; 
       ddlYourTable.DataTextField = "Your_ColumnName"; 
       ddlYourTable.DataValueField = "ID"; 
       ddlYourTable.DataBind(); 



      } 
     } 

------- LINQ助手類----

public class TableRepository 
    { 
     string connstr; 

     public TableRepository() 
     { 
      connstr = Settings.Default.YourTableConnectionString.ToString(); 
     } 

     public List<YourTable> GetAllDataByID(int ID) 
     { 
      List<YourTable> table= new List<YourTable>(); 
      using (YourTableDBDataContext dc = new YourTableDBDataContext()) 
      { 
       table= dc.GetAllDataByID(CID).ToList(); 
      } 
      return table; 
     } 
    } 
0

是不是MVC的想法分離功能和顯示?如果你想重複使用不同順序的同一個列表呢?

我以爲這是最好的,因爲它只對指定的控件進行排序。

添加屬性您正在使用的視圖模型:

public SelectList Fruit { get; set; } 

填充在構造函數列表(我使用實體框架):

model.Fruit= new SelectList(db.tblFruit.Select(f => new { Id = f.ID, Name = f.Name }), "ID", "Name", "[Select Fruit]"); 

添加您的選擇清單:

@Html.DropDownListFor(x => x.ID, new SelectList(Model.Fruit.OrderBy(y => y.Text), "Value", "Text"), "-- Select One --", new { @class = "form-control" }) 
+0

@ Html.DropDownListFor(x => x.ID,new SelectList(Model.Fruit.OrderBy(y => y.Text),「Value」,「Text」),「 - Select One - 」,new { @class =「form-control」})這是做的伎倆,謝謝 – Krish 2016-01-13 07:29:52

0

一個非常簡單的方法來處理它的控制器:

ViewBag.change_week = new SelectList(db.weeks.OrderBy(x=> x.week_guid), "week_guid", "week_number");