Почему в datagridview требуется двойной щелчок для сортировки столбца - PullRequest
0 голосов
/ 07 октября 2011

У меня проблема с автоматической сортировкой данных. Когда я щелкаю заголовок столбца один раз, его значения сортируются, но знак треугольника остается неизменным, поэтому он указывает неправильное направление. При втором щелчке меняется треугольник (теперь он будет указывать в другом направлении, но корректно при сравнении со значениями в представлении данных) И затем процесс сортировки повторяется - поэтому, если я хочу отсортировать столбец, мне нужно дважды щелкнуть заголовок: сначала изменить марку / глиф направления, а затем отсортировать значения.

Я не думаю, что это важно здесь, но для этого DGV я использовал BindingList в качестве источника данных.

Код дизайнера:

        // 
        // dgv
        // 
        this.dgv.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
        this.dgv.Columns.AddRange( new System.Windows.Forms.DataGridViewColumn[] {
        this.monthColumn,
        this.colorColumn} );
        this.dgv.Location = new System.Drawing.Point( 22, 127 );
        this.dgv.Name = "dgv";
        this.dgv.Size = new System.Drawing.Size( 468, 164 );
        this.dgv.TabIndex = 0;
        this.dgv.CellBeginEdit += new System.Windows.Forms.DataGridViewCellCancelEventHandler( this.dgv_CellBeginEdit );
        this.dgv.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler( this.dgv_CellClick );
        this.dgv.CellEndEdit += new System.Windows.Forms.DataGridViewCellEventHandler( this.dgv_CellEndEdit );
        this.dgv.RowsAdded += new System.Windows.Forms.DataGridViewRowsAddedEventHandler( this.dgv_RowsAdded );
        // 
        // monthColumn
        // 
        this.monthColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.AllCells;
        dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
        this.monthColumn.DefaultCellStyle = dataGridViewCellStyle3;
        this.monthColumn.HeaderText = "Miesiące";
        this.monthColumn.Name = "monthColumn";
        this.colorColumn.ValueType = typeof( int );
        this.monthColumn.Width = 72;
        // 
        // colorColumn
        // 
        this.colorColumn.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill;
        dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
        this.colorColumn.DefaultCellStyle = dataGridViewCellStyle4;
        this.colorColumn.HeaderText = "Barwa";
        this.colorColumn.Name = "colorColumn";
        this.colorColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
        this.colorColumn.ValueType = typeof( System.Drawing.Color );

Процедура переплета:

        dgv.AutoGenerateColumns = false;
        monthColumn.DataPropertyName = "Months";
        colorColumn.DataPropertyName = "Color";
        colorColumn.ReadOnly = false;
        dgv.DataSource = bcolors;//BindingList
        dgv.Sort( monthColumn, ListSortDirection.Ascending );

методы событий используются для применения backgroundcolor к строкам и запрещения редактирования colorColumn (readonly не работает?, Но здесь дело не в этом)

1 Ответ

0 голосов
/ 07 октября 2011

Можете ли вы попробовать изменить режим сортировки столбца?

изменить это:

this.colorColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;

на это:

this.colorColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...