DataGridView多列排序(multiple columns sorting for DataGridView)

#region Using directives

using System;
using System.Drawing;
using System.Windows.Forms;

#endregion

class Form1 : Form
{
    
private DataGridView DataGridView1 = new DataGridView();
    
private FlowLayoutPanel FlowLayoutPanel1 = new FlowLayoutPanel();
    
private Button Button1 = new Button();
    
private RadioButton RadioButton1 = new RadioButton();
    
private RadioButton RadioButton2 = new RadioButton();

    
// Establish the main entry point for the application.
    [STAThreadAttribute()]
    
public static void Main()
    {
        Application.Run(
new Form1());
    }

    
public Form1()
    {
        
// Initialize the form.
        
// This code can be replaced with designer generated code.
        AutoSize = true;
        Text 
= "DataGridView IComparer sort demo";

        FlowLayoutPanel1.FlowDirection 
= FlowDirection.TopDown;
        FlowLayoutPanel1.Location 
= new System.Drawing.Point( 3040 );
        FlowLayoutPanel1.AutoSize 
= true;

        FlowLayoutPanel1.Controls.Add( RadioButton1 );
        FlowLayoutPanel1.Controls.Add( RadioButton2 );
        FlowLayoutPanel1.Controls.Add( Button1 );

        Button1.Text 
= "Sort";
        RadioButton1.Text 
= "Ascending";
        RadioButton2.Text 
= "Descending";
        RadioButton1.Checked 
= true;

        Controls.Add( FlowLayoutPanel1 );
        Controls.Add( DataGridView1 );
    }

    
protected override void OnLoad( EventArgs e )
    {
        PopulateDataGridView();
        Button1.Click 
+= new EventHandler(Button1_Click);

        
base.OnLoad( e );
    }

    
// Replace this with your own code to populate the DataGridView.
    private void PopulateDataGridView()
    {

        DataGridView1.Size 
= new Size(300300);

        
// Add columns to the DataGridView.
        DataGridView1.ColumnCount = 2;

        
// Set the properties of the DataGridView columns.
        DataGridView1.Columns[0].Name = "First";
        DataGridView1.Columns[
1].Name = "Last";
        DataGridView1.Columns[
"First"].HeaderText = "First Name";
        DataGridView1.Columns[
"Last"].HeaderText = "Last Name";
        DataGridView1.Columns[
"First"].SortMode = 
            DataGridViewColumnSortMode.Programmatic;
        DataGridView1.Columns[
"Last"].SortMode = 
            DataGridViewColumnSortMode.Programmatic;

        
// Add rows of data to the DataGridView.
        DataGridView1.Rows.Add(new string[] { "Peter""Parker" });
        DataGridView1.Rows.Add(
new string[] { "James""Jameson" });
        DataGridView1.Rows.Add(
new string[] { "May""Parker" });
        DataGridView1.Rows.Add(
new string[] { "Mary""Watson" });
        DataGridView1.Rows.Add(
new string[] { "Eddie""Brock" });
    }

    
private void Button1_Click( object sender, EventArgs e )
    {
        
if ( RadioButton1.Checked == true )
        {
            DataGridView1.Sort( 
new RowComparer( SortOrder.Ascending ) );
        }
        
else if ( RadioButton2.Checked == true )
        {
            DataGridView1.Sort( 
new RowComparer( SortOrder.Descending ) );
        }
    }

    
private class RowComparer : System.Collections.IComparer
    {
        
private static int sortOrderModifier = 1;

        
public RowComparer(SortOrder sortOrder)
        {
            
if (sortOrder == SortOrder.Descending)
            {
                sortOrderModifier 
= -1;
            }
            
else if (sortOrder == SortOrder.Ascending)
            {
                sortOrderModifier 
= 1;
            }
        }

        
public int Compare(object x, object y)
        {
            DataGridViewRow DataGridViewRow1 
= (DataGridViewRow)x;
            DataGridViewRow DataGridViewRow2 
= (DataGridViewRow)y;

            
// Try to sort based on the Last Name column.
            int CompareResult = System.String.Compare(
                DataGridViewRow1.Cells[
1].Value.ToString(),
                DataGridViewRow2.Cells[
1].Value.ToString());

            
// If the Last Names are equal, sort based on the First Name.
            if ( CompareResult == 0 )
            {
                CompareResult 
= System.String.Compare(
                    DataGridViewRow1.Cells[
0].Value.ToString(),
                    DataGridViewRow2.Cells[
0].Value.ToString());
            }
            
return CompareResult * sortOrderModifier;
        }
    }
}

 

 

参考:

http://msdn.microsoft.com/en-us/library/ms171607(VS.80).aspx

http://msdn.microsoft.com/zh-cn/library/ms171608(VS.80).aspx

http://msdn.microsoft.com/en-us/library/95scxcdy.aspx

http://www.codeproject.com/KB/grid/multicolumn_sort.aspx

http://blogs.msdn.com/jfoscoding/articles/494012.aspx

posted @ 2008-12-10 09:45  h2appy  阅读(3270)  评论(0编辑  收藏  举报