为什么datagridview需要双击来对列进行排序
问题描述:
我对自动排序的datagridview有问题。 当我点击列标题一次,它的值被排序,但三角形标记保持不变,所以它指向错误的方向。 第二次点击时,它的三角形发生了变化(它现在将指向不同的方向,但在与datagridview中的值进行比较时是正确的) 然后,排序过程重复 - 因此,如果我想对列进行排序,则必须单击标题两次:首先要更改方向标记/字形,然后再排序值。为什么datagridview需要双击来对列进行排序
我并不认为这很重要,但是对于这个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(只读不工作,但是这不是问题的关键?这里)
答
你可以尝试改变列的sortmode?
改变这一点:
this.colorColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
到这一点:
this.colorColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.Automatic;
这并不在我的情况下改变什么,我也真的不想此列可排序,这就是为什么我用NotSortable设置。 –