• 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

  • 相关阅读:
    PHP查询手机号归属地
    MSVC版本号对应关系
    IT界名人录
    QT5 Win7 项目封装发行版(C++)
    ANSI编码
    微信小程序 for循环说明
    virtualbox 虚拟机 安装win7系统 无法联网
    go 实现两个goroutine交替执行打印数字和字母
    go 学习之反射
    go 学习之数据类型
  • 原文地址:https://www.cnblogs.com/top5/p/1688518.html
Copyright © 2020-2023  润新知