Home

Details on Data Selection: Sorting the Records

 

Sorting the Records in the Table Window

The lists of records we get with a SELECT statement are presented in the order they have in the table. SQL allows you to arrange records in alphabetical order, in chronological order or in numeric incremental order. After selecting a series of columns, you may want to list the records following an alphabetical order from one specific field. To get an alphabetical or an incremental order of records, you must let the database know what field would be used as reference.

To specify the order, if you are using a table window in Microsoft SQL Server Management Studio or in Microsoft Visual Studio:

In the Diagram section, you can right-click a field and select either Sort Ascending or Sort Descending

  • In the Criteria section of the window, under the Sort Type column, click the corresponding box of the desired column. This would reveal that it is a combo box. Then click the arrow of that combo box and make your selection between Ascending and Descending:

Using the Table Window

If you select Ascending or Sort Ascending, the list of records would be re-arranged based on the type of the selected column:

  • If the column is text-based (char, varchar, and their variants), the records would be arranged in alphabetical order
  • If the column is date or time-based (datetime or smalldatetime), the records would be arranged in chronological order
  • If the column is number-based, the records would be arranged in incremental order
  • If the column is Boolean-based (bit), the FALSE records would appear first

If you select Descending or Sort Descending, the list of records would be re-arranged based on the type of the selected column:

  • If the column is text-based (char, varchar, and their variants), the records would be arranged in reverse alphabetical order
  • If the column is date or time-based (datetime or smalldatetime), the records would be arranged in reverse chronological order
  • If the column is number-based, the records would be arranged in decremental order
  • If the column is Boolean-based (bit), the TRUE records would appear first

After selecting the desired Sort Type, you can execute the SQL statement.

Practical LearningPractical Learning: Introducing Data Sorting

  1. Start Microsoft Visual C# and create a new Windows Application named AltairRealtors6
  2. In the Solution Explorer, right-click Form1.cs and click Rename
  3. Type AltairRealtors.cs and press Enter
  4. Double-click the middle of the form and implement the Load event as follows:
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    
    namespace AltairRealtors6
    {
        public partial class AltairRealtors : Form
        {
    	public AltairRealtors()
    	{
    	    InitializeComponent();
    	}
    
    	private void AltairRealtors_Load(object sender, EventArgs e)
    	{
    	    using (SqlConnection cnnAltairRealtors1 =
    		new SqlConnection("Data Source=(local);" +
    		"Integrated Security='SSPI';"))
    	    {
    		string strDatabase = "IF EXISTS (" +
    			"SELECT * " +
    			" FROM sys.databases " +
    			" WHERE name = N'AltairRealtors1' " +
    			")" +
    			"DROP DATABASE AltairRealtors1;" +
    			"CREATE DATABASE AltairRealtors1;";
    
    		SqlCommand cmdAltairRealtors1 = new SqlCommand(strDatabase,
    		cnnAltairRealtors1);
    
    		cnnAltairRealtors1.Open();
    		cmdAltairRealtors1.ExecuteNonQuery();
    
    	MessageBox.Show("The AltairRealtors1 database has been created");
    	    }
    
    	    using (SqlConnection cnnAltairRealtors1 =
    		new SqlConnection("Data Source=(local);" +
    		"Database='AltairRealtors1';" +
    		"Integrated Security='SSPI';"))
    	    {
    		string strAltairRealtors1 =
    			"CREATE TABLE Properties" +
    			"(" +
    			"PropertyID int identity(1,1) NOT NULL," +
    			"PropertyNumber char(6)," +
    			"Address varchar(100)," +
    			"City varchar(50)," +
    			"State char(2)," +
    			"ZIPCode varchar(12)," +
    			"PropertyType varchar(40)," +
    			"Condition varchar(32)," +
    			"Bedrooms smallint," +
    			"Bathrooms float," +
    			"FinishedBasement bit," +
    			"IndoorGarage bit," +
    			"Stories smallint," +
    			"YearBuilt smallint," +
    			"MarketValue money" +
    	        ");";
    
    	        SqlCommand cmdAltairRealtors1 =
    			new SqlCommand(strAltairRealtors1,
    			cnnAltairRealtors1);
    
    	        cnnAltairRealtors1.Open();
    	        cmdAltairRealtors1.ExecuteNonQuery();
    
    	        MessageBox.Show("The Properties table has been created");
    	    }
    
    	    using (SqlConnection cnnAltairRealtors1 =
    		new SqlConnection("Data Source=(local);" +
    			"Database='AltairRealtors1';" +
    			"Integrated Security='SSPI';"))
    	    {
    		string strAltairRealtors1 =
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    	"FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)" +
    	"VALUES('524880', '1640 Lombardo Ave', 'Silver Spring', 'MD'," +
    "'20904', 'Single Family', 'Good', 4, 2.5, 3, 1, 3, 1995, 495880.00);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    	"FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)" +
    	"VALUES('688364', '10315 North Hacht Rd', 'College Park', 'MD'," +
    		"'20747', 'Single Family', 'Excellent', 4, 3.5, 3," +
    		"1, 2, 2000, 620724.00);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, FinishedBasement," +
    		"Stories, MarketValue)" +
    		"VALUES('611464', '6366 Lolita Drive', 'Laurel', 'MD'," +
    		"'20707', 'Single Family', 'Good', 1, 2, 422625.00);" +
    
    		"INSERT INTO Properties(Address, City, PropertyType," +
    		"Bedrooms, MarketValue)" +
    		"VALUES('9002 Palasko Hwy', 'Tysons Corner'," +
    		"'Condominium', 2, 422895.00);" +
    
    		"INSERT INTO Properties(PropertyNumber, State," +
    		"ZIPCode, Bedrooms, YearBuilt, MarketValue)" +
    		"VALUES('420115', 'DC'," +
    		"'20011', 2, 1982, 312555);" +
    
    		"INSERT INTO Properties(PropertyNumber, City, ZIPCode," +
    		"PropertyType, Bedrooms, YearBuilt, MarketValue)" +
    		"VALUES('917203', 'Alexandria', '22024'," +
    		"'Single Family', 3, 1965, 345660.00);" +
    
     	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    	"PropertyType, Condition, Bedrooms, Bathrooms, MarketValue)" +
    		"VALUES('200417', '4140 Holisto Crt', 'Germantown', 'MD'," +
    		"'Condominium', 'Excellent', 2, 1, 215495.00);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    	"FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)" +
    	"VALUES('927474', '9522 Lockwood Rd', 'Chevy Chase', 'MD'," +
    		"'20852', 'Townhouse', 'Bad Shape', 3, 2.5, 3, 0, 3," +
    		"1992, 415665.00);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    	"FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)" +
    		"VALUES('207850', '14250 Parkdoll Rd', 'Rockville', 'MD'," +
    		"'20854', 'Townhouse', 'Good', 3, 2.5, 2, 1, 2," +
    		"1988, 325995.00);" +
    
    		"INSERT INTO Properties(City, PropertyType, Bedrooms," +
    		"YearBuilt, MarketValue)" +
    		"VALUES('Washington', 'Townhouse', 4, 1975, 366775.00);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    		"YearBuilt, MarketValue)" +
    "VALUES('288540', '10340 Helmes Street #408', 'Silver Spring', 'MD'," +
    		"'20906', 'Condominium', 'Good', 1, 1, 2000, 242775.00);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    	"FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)" +
    	"VALUES('247472', '1008 Coppen Street', 'Silver Spring', 'MD'," +
    		"'20906', 'Single Family', 'Excellent'," +
    		"3, 3, 3, 1, 3, 1996, 625450.00);" +
    
    		"INSERT INTO Properties(City, ZIPCode, PropertyType, " +
    		"Stories, YearBuilt, MarketValue)" +
    		"VALUES('Chevy Chase', '20956', 'Single Family', " +
    		"3, 2001, 525450.00);" +
    
    		"INSERT INTO Properties(Address, City, State," +
    		"PropertyType, Condition, Bedrooms, MarketValue)" +
    		"VALUES('686 Herod Ave #D04', 'Takoma Park', 'MD'," +
    		"'Condominium', 'Excellent', 2, 360885.00);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    	"FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)" +
    		"VALUES('297446', '14005 Sniders Blvd', 'Laurel', 'MD'," +
    		"'20707', 'Townhouse', 'Needs Repair'," +
    		"4, 1.5, 3, 1, 2, 2002, 412885.00);" +
    
    	"INSERT INTO Properties(City, ZIPCode, Condition, Bedrooms," +
    		"Stories, YearBuilt)" +
    		"VALUES('Silver Spring', '20905', 'Good'," +
    		"4, 2, 1965);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    	"FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)" +
    		"VALUES('924792', '680 Prushia Rd', 'Washington', 'DC'," +
    		"'20008', 'Single Family', 'Good'," +
    		"5, 3.5, 3, 0, 3, 2000, 555885.00);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    	"FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)" +
    	"VALUES('294796', '14688 Parrison Street', 'College Park', 'MD'," +
    		"'20742', 'Single Family', 'Excellent'," +
    		"5, 2.5, 2, 1, 2, 1995, 485995.00);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    		"YearBuilt, MarketValue)" +
    	"VALUES('811155', '10340 Helmes Street #1012', 'Silver Spring'," +
    		"'MD', '20906', 'Condominium', 'Good'," +
    		"1, 1, 2000, 252775.00);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    	"FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)" +
    	"VALUES('447597', '4201 Vilamar Ave', 'Hyattsville', 'MD'," +
    		"'20782', 'Townhouse', 'Excellent'," +
    		"3, 2, 2, 1, 3, 1992, 365880.00);" +
    
    		"INSERT INTO Properties(Address, ZIPCode, Bathrooms)" +
    		"VALUES('1622 Rombard Str', 20904, 2.5);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    	"FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)" +
    	"VALUES('297415', '980 Phorwick Street', 'Washington', 'DC'," +
    		"'20004', 'Single Family', 'Good'," +
    		"4, 3.5, 3, 3, 1, 2004, 735475.00);" +
    
    	"INSERT INTO Properties(PropertyNumber, Address, City, State," +
    		"ZIPCode, PropertyType, Condition, Bedrooms, Bathrooms," +
    	"FinishedBasement, IndoorGarage, Stories, YearBuilt, MarketValue)" +
    	"VALUES('475974', '9015 Marvin Crow Ave', 'Gaithersburg', 'MD'," +
    		"'20872', 'Single Family', 'Needs Repair'," +
    		"4, 2.5, 3, 1, 1, 1965, 615775.00);";
    
    
    		SqlCommand cmdAltairRealtors1 =
    			new SqlCommand(strAltairRealtors1,
    		cnnAltairRealtors1);
    
    		cnnAltairRealtors1.Open();
    		cmdAltairRealtors1.ExecuteNonQuery();
    
    MessageBox.Show("Some records have been created in the Properties table.");
    	    }
    	}
        }
    }
  5. Execute the application
  6. Close the form and return to your programming environment
  7. Delete the whole code in the Load event
  8. Return to the form
  9. From the Menu & Toolbars section of the Toolbox, click ContextMenuStrip and click the form
  10. Name it cmnProperties
  11. Create the menu items as follows:
     
    Text (Name) Image
    Filter by &Selection mnuFilterBySelection filtsel.ico 
    Filter &Excluding Selection mnuFilterExclSel filtexcl.ico 
    Separator    
    Sort &Ascending mnuSortAscending ascending.ico 
    Sort &Descending mnuSortDescending descending.ico 
    Separator    
    &Remove Filter/Sort  mnuRemoveFilterSort rmvfiltsrt.ico 
  12. Design the form as follows:
     
    Solas Property Rental: Form Design
    Control Text Name Other Properties
    DataGridView   dgvProperties Anchor: Top, Bottom, Left, Right
    ContextMenuStrip: cmnProperties
    GroupBox Fields to Show grpFieldsToShow Anchor: Bottom, Left, Right
    RadioButton Show all Fields rdoShowAllFields  
    RadioButton Show Only rdoShowSomeFields  
    CheckedListBox   clbColumns CheckOnClick: True
    MultiColumn: True
    Anchor: Bottom, Left, Right
    Button Execute btnExecute Anchor: Bottom, Right
    Button Close btnClose Anchor: Bottom, Right
  13. Double-click an unoccupied area of the form and implement the Load event as follows:
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    
    namespace AltairRealtors6
    {
        public partial class AltairRealtors : Form
        {
    	public AltairRealtors()
        	{
    	    InitializeComponent();
    	}
    
    	private void AltairRealtors_Load(object sender, EventArgs e)
    	{
    	    using (SqlConnection cnnProperties =
    		new SqlConnection("Data Source=(local);" +
    				  "Database='AltairRealtors1';" +
    				  "Integrated Security='SSPI';"))
    	    {
    		string strSelect = "SELECT * FROM Properties;";
    
    		SqlCommand cmdProperties = new SqlCommand(strSelect,
    						cnnProperties);
    		SqlDataAdapter sdaProperties =
    			new SqlDataAdapter(cmdProperties);
    		BindingSource bsProperties = new BindingSource();
    
    		DataSet dsProperties = new DataSet("PropertiesSet");
    		sdaProperties.Fill(dsProperties);
    
    		cnnProperties.Open();
    		bsProperties.DataSource = dsProperties.Tables[0];
    
    		dgvProperties.DataSource = bsProperties;
    		foreach (DataColumn col in dsProperties.Tables[0].Columns)
    		    clbColumns.Items.Add(col.ColumnName);
    	    }
    
    	    rdoShowAllFields.Checked = true;
    	}
        }
    }
  14. Return to the form and double-click the Execute button
  15. Implement its Click event as follows:
     
    private void btnExecute_Click(object sender, EventArgs e)
    {
        using (SqlConnection cnnProperties =
    	new SqlConnection("Data Source=(local);" +
    			  "Database='AltairRealtors1';" +
    			  "Integrated Security='SSPI';"))
       {
    	string strColumns = "";
    
    	foreach (string str in clbColumns.CheckedItems)
    	    strColumns = strColumns + ", " + str;
    
    	string strResult = "";
    
    	if (rdoShowAllFields.Checked == true)
    	    strResult = "SELECT * FROM Properties";
    	else
    	    strResult = "SELECT " +
    			strColumns.Substring(1) +
    			" FROM Properties";
    
    	SqlCommand cmdProperties =
    		new SqlCommand(strResult, cnnProperties);
    	SqlDataAdapter sdaProperties =
    		new SqlDataAdapter(cmdProperties);
    	BindingSource bsProperties = new BindingSource();
    
    	DataSet dsProperties = new DataSet("PropertiesSet");
    	sdaProperties.Fill(dsProperties);
    
    	cnnProperties.Open();
    	bsProperties.DataSource = dsProperties.Tables[0];
    
    	dgvProperties.DataSource = bsProperties;
        }
    }
  16. Return to the form and double-click the checked list box
  17. Implement its event as follows:
     
    private void clbColumns_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (clbColumns.CheckedItems.Count < 1)
    	rdoShowAllFields.Checked = true;
        else
    	rdoShowSomeFields.Checked = true;
    }
  18. Return to the form and double-click the Close button
  19. Implement its event as follows:
     
    private void btnClose_Click(object sender, EventArgs e)
    {
        Close();
    }
  20. Execute the application to see the result
     
    Altair Realtors
  21. Click a few check boxed in the bottom control
  22. Click the Execute button
     
    Altair Realtors
  23. Close the form and return to your programming environment

Sorting the Records in SQL

In SQL, to specify the sorting order, use the ORDER BY expression. The formula to follow is:

SELECT What FROM WhatObject ORDER BY WhatField;

The column used as the basis must be recognized as part of the selected columns. For example, to get a list of students in alphabetical order based on the LastName column, you can use the following statement:

SELECT FirstName, 
       LastName, 
       DateOfBirth, 
       Sex
FROM Students
ORDER BY LastName;

This would produce:

Using the SQL

In the same way, you can get the list of girls followed by the list of boys by ordering the list in alphabetical order based on the Sex column. The statement to get this result can be written as follows:

SELECT FirstName, LastName, Gender, EmailAddress
FROM Students
ORDER BY Gender

As another example, to list all students arranged in alphabetical order by their last name, you can change the statement as follows:

SELECT * FROM Students
ORDER BY LastName

By default, records are ordered in ascending order. Nevertheless, the ascending order is controlled using the ASC keyword specified after the based field. For example, to sort the last names in ascending order including the first and last names, you would use a statement as follows:

SELECT * FROM Students
ORDER BY LastName ASC

On the other hand, if you want to sort records in reverse order, you can use the DESC keyword instead. It produces the opposite result to the ASC effect. Here is an example:

SELECT FirstName,
       LastName,
       Gender,
       ParentsNames,
       SPHome
FROM Students
ORDER BY LastName DESC;

This would produce:

Sorting Records

Practical LearningPractical Learning: Sorting the Records

  1. Change the design of the form as follows:
     
    Solas Property Rental: Form Design
    Control Text Name Other Properties
    Label Arrange    
    ComboBox   cbxColumns DropDownStyle: DropDownList
    Label in    
    ComboBox   cbxAscendingDescending DropDownStyle: DropDownList
    Items:
    Ascending Order
    Descending Order
  2. Double-click an unoccupied area of the form and change the Load event as follows:
     
    private void AltairRealtors_Load(object sender, EventArgs e)
    {
        // Open a connection to the database
        using (SqlConnection cnnProperties =
    	new SqlConnection("Data Source=(local);" +
    			  "Database='AltairRealtors1';" +
    			  "Integrated Security='SSPI';"))
        {
    	// This statement creates a list of all properties
    	string strSelect = "SELECT * FROM Properties;";
    	// This data set will hold the tables of the database
    	DataSet dsProperties = new DataSet("PropertiesSet");
    
    	// Create a command to perform on the connection
    	SqlCommand cmdProperties = new SqlCommand(strSelect,
    						  cnnProperties);
    
    	// Create a data adapter that will populate the data set
    	SqlDataAdapter sdaProperties =
    		new SqlDataAdapter(cmdProperties);
    
    	// Create a binding source
    	BindingSource bsProperties = new BindingSource();
    
    	// Fill the data set with the values
    	sdaProperties.Fill(dsProperties);
    
    	// Open the connection
    	cnnProperties.Open();
    
    	// Get the table from the data set
    	DataTable tblProperties = dsProperties.Tables[0];
    	// Assign that table to the binding source
    	bsProperties.DataSource = tblProperties;
    
    	// Apply that binding source to the data grid view
    	dgvProperties.DataSource = bsProperties;
    
    	// Get a list of the columns of the table and
    	// put them the names of those columns in the checked list box
    	foreach (DataColumn col in dsProperties.Tables[0].Columns)
    	{
    	    clbColumns.Items.Add(col.ColumnName);
    	    cbxColumns.Items.Add(col.ColumnName);
    	}
    
    	rdoShowAllFields.Checked = true;
    	cbxColumns.SelectedIndex = 0;
    	cbxAscendingDescending.SelectedIndex = 0;
        }
    }
  3. Change the code of the Click event of the Execute button as follows:
     
    private void btnExecute_Click(object sender, EventArgs e)
    {
        // Open a connection to the database
        using (SqlConnection cnnProperties =
    	new SqlConnection("Data Source=(local);" +
    			  "Database='AltairRealtors1';" +
    			  "Integrated Security='SSPI';"))
        {
    	// Get the list of columns checked in the list box
    	// and put it in the Arrange combo box
    	string strColumns = "";
    
    	foreach (string str in clbColumns.CheckedItems)
    	    strColumns = strColumns + ", " + str;
    
    	// Find out what radio button is selected and use it
    	// to know what column(s) will be used
    	string strResult = "";
    
    	if (rdoShowAllFields.Checked == true)
    	    strResult = "SELECT * FROM Properties";
    	else
    	    strResult = "SELECT " +
    			strColumns.Substring(1) +
    			" FROM Properties";
    
    	// Find out what sort order is selected and apply it
    	if (cbxAscendingDescending.Text == "Ascending Order")
    	  strResult = strResult + " ORDER BY " + cbxColumns.Text + " ASC;";
    	else
    	  strResult = strResult + " ORDER BY " + cbxColumns.Text + " DESC;";
    
    	// Create a command to execute on the database
    	SqlCommand cmdProperties =
    	    new SqlCommand(strResult, cnnProperties);
    	// Create a data adapter that will populate the data set
    	SqlDataAdapter sdaProperties =
    	    new SqlDataAdapter(cmdProperties);
    	// Create a binding source
    	BindingSource bsProperties = new BindingSource();
    	// Create a data set
    	DataSet dsProperties = new DataSet("PropertiesSet");
    
    	// Fill the data set with the records in the data adapter
    	sdaProperties.Fill(dsProperties);
    
    	// Open the connection
    	cnnProperties.Open();
    	// Assign the Properties table to the binding source
    	bsProperties.DataSource = dsProperties.Tables[0];
    
    	// Assign the binding source to the data grid view
    	dgvProperties.DataSource = bsProperties;
        }
    }
  4. Return to the form and double-click the combo box on the right side of the Arrange label
  5. Implement the SelectedIndexChanged event as follows:
     
    private void clbColumns_SelectedIndexChanged(object sender, EventArgs e)
    {
        // This list will hold the names of checked columns in the list box
        List<string> lstColumns = new List<string>();
    
        // Assist the user with checking the radio buttons
        // based on the contents of the list box
        if (clbColumns.CheckedItems.Count < 1)
    	rdoShowAllFields.Checked = true;
        else
    	rdoShowSomeFields.Checked = true;
    
        // If the second radio button is selected, get the columns 
        // checked in the list box and add them to the Arrange combo box
        if (rdoShowSomeFields.Checked == true)
        {
    	cbxColumns.Items.Clear();
    
    	foreach (object objItem in clbColumns.CheckedItems)
    	    cbxColumns.Items.Add(objItem);
    
    	cbxColumns.SelectedIndex = 0;
        }
    }
  6. Execute application and test the form
  7. Close the form and return to your programming environment

Sorting the Records in the Data Grid View

If you use a data grid view in your application, you can sort records without writing a single line of code. To sort the records based on a particular column, click the column header. After clicking for the first time, the column is sorted alphabetically, incrementally, or chronologically and an up-pointing arrow button would appear on the column header. Here is an example on the City column:

Sorting Records Using the Data Grid View

To sort records in reverse order based on a particular column, you can click the column again. Or, you must first click the column header to sort in order, then click the same column header again to reverse. When the records are sorted in reverse, a down-pointing arrow button would appear on the column header. Here is an example on the ZIPCode column:

Sorting Records Using the Data Grid View

Practical LearningPractical Learning: Sorting the Records Using the Data Grid View

  1. Right-click the form and click View Code.
    In the top section of the class, declare a DataGridViewColumn variable named colSelected:
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Data.SqlClient;
    
    namespace AltairRealtors6c
    {
        public partial class AltairRealtors : Form
        {
    	DataGridViewColumn colSelected;
    
      	public AltairRealtors()
    	{
    	    InitializeComponent();
    	}
    
    	. . . No Change
  2. In the Load event, initialize the new variable using the default constructor of its class:
     
    private void AltairRealtors_Load(object sender, EventArgs e)
    {
        colSelected = new DataGridViewColumn();
    
        . . . No Change
    }
  3. Return to the form
  4. In the Events section of the Properties window, double-click MouseDown and implement the event as follows:
     
    private void dgvProperties_MouseDown(object sender, MouseEventArgs e)
    {
        // Identity the point where the mouse landed
        DataGridView.HitTestInfo hti = dgvProperties.HitTest(e.X, e.Y);
        // Create a cell reference based on the coordinates of the mouse
        DataGridViewCell celSelected = 
    	dgvProperties.Rows[hti.RowIndex].Cells[hti.ColumnIndex];
     
        // Just in case the user right-clicked, select that cell
        dgvProperties.CurrentCell = celSelected;
    
        // Identify the selected column and initialize our variable with it
        colSelected = dgvProperties.Columns[hti.ColumnIndex];
    }
  5. Return to the form and, under it, click the cmnProperties context menu
  6. On the form, under ContextMenuStrip, double-click Sort Ascending, and implement the event as follows:
     
    private void mnuSortAscending_Click(object sender, EventArgs e)
    {
        // Since we know what column is going to be used to sort the record, 
        // synchronize it with the Arrange combo box
        cbxColumns.Text = colSelected.Name;
        // Since the user clicked Ascending, synchronize with the in combo box
        cbxAscendingDescending.SelectedIndex = 0;
        // Sort the records using the data grid view
        dgvProperties.Sort(colSelected, ListSortDirection.Ascending);
    }
  7. Return to the form and double-click Sort Descending
  8. Implement the event as follows:
     
    private void mnuSortDescending_Click(object sender, EventArgs e)
    {
        // Since we know what column is going to be used to sort the record, 
        // synchronize it with the Arrange combo box
        cbxColumns.Text = colSelected.Name;
        // Since the user clicked Ascending, synchronize with the in combo box
        cbxAscendingDescending.SelectedIndex = 1;
        // Sort the records using the data grid view
        dgvProperties.Sort(colSelected, ListSortDirection.Descending);
    }
  9. Execute the application
  10. Right-click a value in a column and sort the records
  11. Close the form and return to your programming environment

Published on Friday 04 January 2008


Home Copyright © 2007 FunctionX, Inc.