12

在我的应用程序中,我有一个 DataGridView,它的数据源根据您单击的按钮而有所不同。EG 点击“Total Downloads”,它将是:

dataGridView1.DataSource = totalDownloads();

或者每个玩家的下载量

dataGridView1.DataSource = playerDownloads();

每个方法通过 SQL 查询获取数据,并返回该信息的数据表。

但是,使用我的以下代码:

dataGridView1.DataSource=getStats();
public DataTable getStats()
   {
        DataTable table1 = new DataTable("Totals");
        table1.Columns.Add("Park Name");
        table1.Columns.Add("Author");
        table1.Columns.Add("Total Downloads");
        table1.Columns[2].DataType = typeof(int);
        table1.Columns.Add("Rating (Max 5)");           
        table1.Columns[3].DataType = typeof(float);
        table1.Rows.Add(name,author,download, rating);
        }
        return table1;
    }

我希望按顺序看到这些列:“Park Name”“Author”“Total Downloads”“Rating”但是,它们以“Downloads”、“Park Name”、“Author”、“Rating”的形式出现

我读过添加: dataGridView1.AutoGenerateColumns = false; 将解决这个问题......但是,这对订单没有任何影响......

谢谢您的帮助!

4

8 回答 8

22

这是 WinForms 项目还是 Asp.net 项目?

如果是winforms,您应该能够通过访问您的 GridViews Columns DisplayIndex 来更改列的显示顺序

    dataGridView1.Columns["Park Name"].DisplayIndex = 0; // or 1, 2, 3 etc
于 2013-06-10T15:28:09.033 回答
11

我对列乱序的简单解决方案是添加这个循环,DisplayIndexIndex.

foreach (DataGridViewColumn col in grid.Columns) {
    col.DisplayIndex = col.Index;
}

Index在添加时分配给每一列。我不确定为什么DisplayIndex会出现故障,但上面的脚本会修复它。

这可能与单线一样有效:

grid.Columns.foreach(c => c.DisplayIndex = c.Index);
于 2016-05-06T14:16:52.623 回答
8

对我来说,这不是诀窍。还需要一行:

entityDataGridView.AutoGenerateColumns = false;

问候!

于 2016-03-22T22:05:34.953 回答
4

尝试像这样玩显示索引

 private void AdjustColumnOrder()
{
    customersDataGridView.Columns["Park Name"].DisplayIndex = 0;
    customersDataGridView.Columns["Author"].DisplayIndex = 1;
    customersDataGridView.Columns["Total Downloads"].DisplayIndex = 2;
}
于 2013-06-10T15:28:50.710 回答
2

我有同样的问题。我解决了:

dataGridView.DataSource = null;
dataGridView.DataSource = MyDataTable;
于 2016-08-10T21:35:36.553 回答
1

我发现这很有帮助。

用法: ColumnDisplayOrder("Park Name, Author, Total Downloads", myDataGridView);

    private void ColumnDisplayOrder(string columnList, DataGridView gridView)
    {
        var columnListArray = columnList.Split(',');
        for (var i = 0; i < columnListArray.Length; i++)
        {
            var gridViewColumn = gridView.Columns[columnListArray[i].Trim()];
            if (gridViewColumn != null)
                gridViewColumn.DisplayIndex = i;
        }
    }
于 2016-10-12T21:47:52.320 回答
1

我有同样的问题并找到了原因。这是由于类属性的顺序:

   public string Downloads { get; set; }
   public string ParkName { get; set; }
   public string Author { get; set; }
   public float Rating { get; set; }

为您提供下载、公园名称、作者、评级

如果你重新排列它们,顺序应该和你期望的一样。

于 2019-01-11T12:51:37.007 回答
0

我在数据网格中的列顺序有同样的问题,在我的项目数据源中是对象列表,通过设计器我按正确的顺序添加了列,但是当我开始应用程序时,顺序是混合的。当我在类中的属性上添加绑定时,我注意到我的属性在数据网格中的列顺序方面的顺序错误,所以我在类中添加属性的顺序与添加列的顺序相同,即使AutoGenerateColumns设置为,我也得到了正确的顺序真的

于 2020-02-02T12:08:43.867 回答