DataGridView列顺序无法正常工作

时间:2017-04-08 10:44:47

标签: c# datagridview datatable windows-applications

我有一个datagridview,在构造函数中我将Datagrid值绑定为数据表。

我在运行时更改列的顺序。我隐藏了一些列,我重新排列了一些列。 (列是动态的。有时候我有10个,有时候我有20列)

隐藏列不可见。这很好。但重新排列的列的顺序不正确。

我在这里遗漏了什么吗?

这是我的代码:

<style>
            .col{
                min-height: 500px;
                background-color: gray;
            }
</style>

任何帮助都会非常感激。

    Public Class()
    {
        myGrid.DataSource = gridDataTable;
    }


    List<int> columnsOrder;           //Order index values
    List<string> columnNameFromExcel; // Hiding column strings

    private void VisibleColumns()
    {
        for (int i = 0; i < myGrid.ColumnCount; i++)
        {
            //Hiding columns based on some logics
            if(!columnNameFromExcel.Values.Contains(myGrid.Columns[i].DataPropertyName))
            {
                myGrid.Columns[i].Visible = false;
            }

            //Changing the display index               

             myGrid.Columns[i].DisplayIndex = columnsOrder[i];
        }
    }

注意: 我编辑了我的问题以避免混淆。分配显示索引很好。我在运行时检查过它。没有重复。但是,仍然有一些专栏的命令在执行后没有正确安排。

3 个答案:

答案 0 :(得分:0)

您可以使用以下方法使用DisplayIndex,

制作列的顺序
private void makeColumnOrder()
{
    customersDataGridView.Columns["Column1"].DisplayIndex = 0;
    customersDataGridView.Columns["Column2"].DisplayIndex = 1;
    customersDataGridView.Columns["Column3"].DisplayIndex = 2;
}

答案 1 :(得分:0)

DisplayIndex是唯一的,因此2行不能具有相同的displayIndex。假设似乎在重新排序之前创建了行,所以当您在另一行之前移动一行时,会导致移位。如果2列具有Column [A] .Index> Column [B] .Index,并且您需要具有Column [A] .DisplayIndex ,则会发生这种情况

我修复了恢复对行进行分析的顺序。在您的示例中进行更改:

uwsgi

for (int i = 0; i < myGrid.ColumnCount; i++)

答案 2 :(得分:0)

响应一个旧的帖子/问题,我尝试在分配AutoGenerateColumns之前关闭datagridview的DisplayIndex属性,这对我有用。

dgv1.AutoGenerateColumns = false;
dgv1.Columns["column1HeaderText"].DisplayIndex = 0;
dgv1.Columns["column2HeaderText"].DisplayIndex = 1;
dgv1.Columns["column3HeaderText"].DisplayIndex = 2;

一个建议是,如果必须隐藏某些列/任何列,则在设置显示索引后将其隐藏。

dgv1.Columns["column1HeaderText"].Visible = false;