Sorting a DropDownList? - C#, ASP.NET

前端 未结 23 1048
慢半拍i
慢半拍i 2020-12-08 19:17

I\'m curious as to the best route (more looking towards simplicity, not speed or efficiency) to sort a DropDownList in C#/ASP.NET - I\'ve looked at a few recommendations b

相关标签:
23条回答
  • 2020-12-08 19:58

    Try it

    -------Store Procedure-----(SQL)

    USE [Your Database]
    GO
    
    
    CRATE PROC [dbo].[GetAllDataByID]
    
    @ID int
    
    
    AS
    BEGIN
            SELECT * FROM Your_Table
            WHERE ID=@ID
            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 Helper Class----

    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(ID).ToList();
                }
                return table;
            }
        }
    
    0 讨论(0)
  • 2020-12-08 19:59

    If your data is coming to you as a System.Data.DataTable, call the DataTable's .Select() method, passing in "" for the filterExpression and "COLUMN1 ASC" (or whatever column you want to sort by) for the sort. This will return an array of DataRow objects, sorted as specified, that you can then iterate through and dump into the DropDownList.

    0 讨论(0)
  • 2020-12-08 20:01

    If you are adding options to the dropdown one by one without a dataset and you want to sort it later after adding items, here's a solution:

    DataTable dtOptions = new DataTable();
    DataColumn[] dcColumns = { new DataColumn("Text", Type.GetType("System.String")), 
                               new DataColumn("Value", Type.GetType("System.String"))};
    dtOptions.Columns.AddRange(dcColumns);
    foreach (ListItem li in ddlOperation.Items)
    {
       DataRow dr = dtOptions.NewRow();
       dr["Text"] = li.Text;
       dr["Value"] = li.Value;
       dtOptions.Rows.Add(dr);
    }
    DataView dv = dtOptions.DefaultView;
    dv.Sort = "Text";
    ddlOperation.Items.Clear();
    ddlOperation.DataSource = dv;
    ddlOperation.DataTextField = "Text";
    ddlOperation.DataValueField = "Value";
    ddlOperation.DataBind();
    

    This would sort the dropdown items in alphabetical order.

    0 讨论(0)
  • 2020-12-08 20:08

    It is recommended to sort the data before databinding it to the DropDownList but in case you can not, this is how you would sort the items in the DropDownList.

    First you need a comparison class

    Public Class ListItemComparer
        Implements IComparer(Of ListItem)
    
        Public Function Compare(ByVal x As ListItem, ByVal y As ListItem) As Integer _
            Implements IComparer(Of ListItem).Compare
    
            Dim c As New CaseInsensitiveComparer
            Return c.Compare(x.Text, y.Text)
        End Function
    End Class
    

    Then you need a method that will use this Comparer to sort the DropDownList

    Public Shared Sub SortDropDown(ByVal cbo As DropDownList)
        Dim lstListItems As New List(Of ListItem)
        For Each li As ListItem In cbo.Items
            lstListItems.Add(li)
        Next
        lstListItems.Sort(New ListItemComparer)
        cbo.Items.Clear()
        cbo.Items.AddRange(lstListItems.ToArray)
    End Sub
    

    Finally, call this function with your DropDownList (after it's been databound)

    SortDropDown(cboMyDropDown)
    

    P.S. Sorry but my choice of language is VB. You can use http://converter.telerik.com/ to convert the code from VB to C#

    0 讨论(0)
  • 2020-12-08 20:08

    What kind of object are you using for databinding? Typically I use Collection<T>, List<T>, or Queue<T> (depending on circumstances). These are relatively easy to sort using a custom delegate. See MSDN documentation on the Comparison(T) delegate.

    0 讨论(0)
  • 2020-12-08 20:09

    Assuming you are running the latest version of the .Net Framework this will work:

    List<string> items = GetItemsFromSomewhere();
    items.Sort((x, y) => string.Compare(x, y));
    DropDownListId.DataSource = items;
    DropDownListId.DataBind();
    
    0 讨论(0)
提交回复
热议问题