3

特定の列ヘッダーがクリックされたときにカスタム並べ替えを適用し、列ヘッダーが再度クリックされたときに並べ替えを元に戻す必要がある Windows フォーム DataGridView があります。

独自の並べ替えアルゴリズムを実装しますが、イベントで列ヘッダーのクリックを配線またはトリガーし、その列に適用された最後の並べ替えを追跡して、並べ替えプロセスを元に戻す方法が不明です。

DataGridView のデータはリストを通じて提供され、行はmyList.Rows.Add(string_1, string_2, string_3)DataGridView に追加されます。

これは私のコードではないことに注意してください。各列にカスタムソートを実装するように求められました。

私はオンラインで調べましたが、例や説明を見つけることができませんでした。

誰でもサンプル コードを提供してもらえますか、またはこれを実装する方法の明確な例を示す良いサイトを教えてください。

前もって感謝します、

マーワン

4

2 に答える 2

2

このスレッドでソート方法を使用する場合:

2列でデータグリッドビューをソートする方法

ユーザーがクリックした最新の N 列を正しい順序で追跡する簡単な方法を次に示します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private readonly Stack<int> _stack = new Stack<int>();

        public Form1()
        {
            InitializeComponent();
        }

        private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            // Column history
            _stack.Push(e.ColumnIndex);

            // Number of columns to track
            int columns = 3;

            // Build sort string
            int[] array = _stack.Distinct().ToArray();
            var builder = new StringBuilder();
            for (int index = 0; index < array.Length; index++)
            {
                int i = array[index];
                if (index >= columns)
                {
                    break;
                }

                DataGridViewColumn gridViewColumn = dataGridView1.Columns[i];
                string sort = null;
                switch (gridViewColumn.HeaderCell.SortGlyphDirection)
                {
                    case SortOrder.None:
                    case SortOrder.Ascending:
                        sort = "ASC";
                        break;
                    case SortOrder.Descending:
                        sort = "DESC";
                        break;
                    default:
                        throw new ArgumentOutOfRangeException();
                }
                builder.AppendFormat("{0} {1}, ", gridViewColumn.Name, sort);
            }
            string s = builder.ToString();
            s = s.Remove(s.Length - 2);
            Console.WriteLine(s);
        }
    }
}
于 2013-06-14T17:55:58.147 に答える