【问题标题】:sorting not all of columns in datagridview [closed]不是对datagridview中的所有列进行排序[关闭]
【发布时间】:2014-10-21 23:31:09
【问题描述】:

可以通过单击ColumnHeaderCell 之一来对DataGridView 进行排序。但我希望包含每一行索引的一列保持固定。

我的意思是,当我单击另一个列标题时,网格行应该按该列的内容进行排序,除了包含行索引的第一列。

对不起!我无法发布图片!

【问题讨论】:

    标签: c# datagridview columnsorting


    【解决方案1】:

    如果您的意思是要打破行:不,如果不完全重新创建它们,您就无法做到这一点。行是一个带有列的单元,它们只能作为一个单元移动。

    但是,如果您希望一列始终包含可见的行号,您只需在每次排序后重新填充该列:

    private void dataGridView1_Sorted(object sender, EventArgs e)
    {
       dataGridView1.SuspendLayout();
       int yourindex = 0; // whichever column your index is at
       foreach (DataGridViewRow row in dataGridView1.Rows) 
                                row.Cells[yourindex].Value = row.Index;
       dataGridView1.ResumeLayout();
    
    }
    

    注意:这样做您将失去重新创建原始排序顺序的能力。这可能不是问题。如果是,您需要包含一个名为“key”或“old order”之类的额外列。

    【讨论】:

    • 感谢您的回答,但重新创建该列需要很长时间。例如,我有 200 行,每次点击我都必须等待几秒钟才能看到更改。也许我必须为该列使用另一个 datagridview,但我想是否有更好的解决方案。
    • 嗯?即使在较慢的机器上,用数字填充 200 个单元格也不应该超过几分之一秒。为避免不必要的屏幕更新,将 DGV 置于暂停布局模式可能会有所帮助,请参阅已编辑的答案!但实际上我可以添加 20000 行,而设置这些索引仍然需要不到一秒钟的时间!如果您在 200 行中花费的时间超过一秒钟,那么会发生其他事情......!?
    【解决方案2】:

    试试这个

    Int32 columnIndex = 1;// Index of the column you want as to be not sortable
    DataGridView.Columns[columnIndex].SortMode = DataGridViewColumnSortMode.NotSortable;
    

    并确保在填充数据后执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-05
      • 2015-10-26
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多