Using DataView.Sort


After my DataView.RowFilter post, the next obvious step is of course a short post on using the DataView.Sort property. This property is simpler, as it simply takes column names, with a possible ASC or DESC modifier. You cannot use expressions directly in the Sort property, although you can use expression columns (see the sample below).


To give this a try, build it with the referenced command line (assuming you save this to dv.cs), and run it with dv.exe. Here are some interesting values to try:



  • Name

  • Name, ID

  • Name, ID DESC

  • ID * 2 (will display an error message)

  • DoubleID (works fine)

dv.cs 


// %windir%\Microsoft.NET\Framework\v2.0.50727\csc.exe dv.cs


using System;
using System.Data;
using System.Windows.Forms;


namespace NS
{
    public class DoIt
    {
        [STAThread]
        public static void Main(string[] args)
        {
            DataTable table = new DataTable();
            table.Columns.Add(new DataColumn("ID", typeof(int)));
            table.Columns.Add(new DataColumn("Name", typeof(string)));
            table.Columns.Add(new DataColumn("Date", typeof(DateTime)));
            table.Columns.Add(new DataColumn("DoubleID", typeof(int), "ID * 2"));
            table.Rows.Add(new object[] { 1, "Charlie", DateTime.Now });
            table.Rows.Add(new object[] { 2, "Candy", DateTime.Now.AddHours(2) });
            table.Rows.Add(new object[] { 3, "Candy", DateTime.Now.AddHours(4) });
           
            DataView dv = new DataView(table);


            DataGridView view = new DataGridView();
            view.DataSource = dv;
            view.Dock = DockStyle.Fill;
           
            Form form = new Form();
            form.Text = "DataView Sort Sample";
           
            Label label = new Label();
            label.Dock = DockStyle.Bottom;
           
            TextBox box = new TextBox();
            box.Dock = DockStyle.Top;
            box.TextChanged += delegate {
                try
                {
                    dv.Sort = box.Text;
                    label.Text = "";
                }
                catch(Exception exception)
                {
                    label.Text = exception.Message;
                }
            };


            form.Controls.Add(view);
            form.Controls.Add(box);
            form.Controls.Add(label);
           
            Application.Run(form);
        }
    }
}

Comments (0)

Skip to main content