繁体   English   中英

C# DataGridView 列顺序

[英]C# DataGridView Column Order

在我的应用程序中,我有一个 DataGridView,它的数据源因您单击的按钮而异。 EG 单击“总下载量”将是:

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;
    }

我希望看到的列的顺序是:“公园名称”“作者”“总下载量”“评级”但是,它们出现在“下载”、“公园名称”、“作者”、“评级”中

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

谢谢您的帮助!

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

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

    dataGridView1.Columns["Park Name"].DisplayIndex = 0; // or 1, 2, 3 etc

我对列乱序的简单解决方案是添加此循环,将DisplayIndex设置为Index

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

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

这可能与单行一样有效:

grid.Columns.foreach(c => c.DisplayIndex = c.Index);

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

entityDataGridView.AutoGenerateColumns = false;

问候!

尝试像这样使用显示索引

 private void AdjustColumnOrder()
{
    customersDataGridView.Columns["Park Name"].DisplayIndex = 0;
    customersDataGridView.Columns["Author"].DisplayIndex = 1;
    customersDataGridView.Columns["Total Downloads"].DisplayIndex = 2;
}

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

dataGridView.DataSource = null;
dataGridView.DataSource = MyDataTable;

我发现这非常有帮助。

用法: 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;
        }
    }

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM