C# 为什么datagridview需要双击对列进行排序

C# 为什么datagridview需要双击对列进行排序,c#,winforms,.net-4.0,C#,Winforms,.net 4.0,我对datagridview的自动排序有问题。 当我单击一次列标题时,它的值被排序,但三角形标记保持不变,所以它指向错误的方向。 在第二次单击时,三角形发生了变化(现在它将指向不同的方向,但在与datagridview中的值进行比较时是正确的) 然后,排序过程会重复——所以如果我想对列进行排序,我必须单击标题两次:第一次是更改方向标记/图示符,第二次是对值进行排序 我认为它在这里并不重要,但对于这个DGV,我使用BindingList作为数据源 设计器代码: //

我对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(readonly不起作用,但这不是重点)

您可以尝试更改列的sortmode吗

更改此项:

this.colorColumn.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable;
为此:

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

在我的情况下,这不会改变任何事情,而且我真的不希望此列是可排序的,这就是我使用NotSortable设置的原因。