1

我正在使用 DataGridView,并遇到了一个问题,即根据 DisplayIndex,列有时没有以正确的顺序显示。我在另一个网站http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/35c1ed09-f4a4-4b3d-bd46-35a11cb8a9bc上发现了同样的问题。

问题似乎是当列没有出现在网格的初始显示上时,因为它偏向右侧并且需要滚动才能看到它。当列足够少以至于无需滚动即可看到所有列时,则顺序正确。如果添加了一列,其中一列需要滚动才能看到,那么根据 DisplayIndex,右边的列将不是最后一列,而是应该早先显示的列。

虽然我可以尝试更改窗口中的逻辑以类似于上面链接中的建议工作,但我不喜欢基本问题只是被掩盖并且需要解决方法。是否有人对如何以解决问题本身而不是解决方法的方式解决此问题有任何建议?

这是我目前如何订购的代码片段:

// Fill the data grid view with data from the database.
dataGridView1.DataSource = null;
DataTable dt = // Logic to get data from DB here
dataGridView1.DataSource = dt;

// Get the column display data.  This can change per user.
DataTable columnDisplay = // Logic to get data from DB here

bool foundMatch;

foreach (DataGridViewColumn column in dataGridView1.Columns)
{
    foundMatch = false;
    foreach (DataRow row in columnDisplay.Rows)
    {
        if (row["column_name"].ToString().Equals(column.Name, StringComparison.CurrentCultureIgnoreCase))
        {
            foundMatch = true;
            if (row["show_in_window"].ToString().Equals("y"))
            {
                // Set the column placement and display name.
                dataGridView1.Columns[column.Name].DisplayIndex = Convert.ToInt32(row["column_sequence"].ToString());
                dataGridView1.Columns[column.Name].HeaderText = row["display_name"].ToString();
                dataGridView1.Columns[column.Name].Width = 105;
            }
            else
            {
                // Hide the column.
                dataGridView1.Columns[column.Name].Visible = false;
            }
            break;
        }
    }

    // If the column is not in the display table, then it should not be displayed at all.
    if (!foundMatch)
        column.Visible = false;
}
4

1 回答 1

0

好的,由于没有人回复,我会提供更新 - 我没有花时间解决这个问题。它被认为是一个足够低的优先级,我可能几个月都不会得到它,如果有的话。

自原始帖子以来,我发现的一条有趣的信息是,当修改列的显示索引号时,其余列会自动更改以适应它。当我阅读 msdn 文档时,这对我来说并不明显,所以也许它会对其他任何偶然发现的人有所帮助。

于 2012-10-22T20:52:10.027 回答