我有一个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];
}
}
注意: 我编辑了我的问题以避免混淆。分配显示索引很好。我在运行时检查过它。没有重复。但是,仍然有一些专栏的命令在执行后没有正确安排。
答案 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;