我正在使用DataGridView,並遇到問題,有時根據DisplayIndex按正確順序顯示列。我在其他網站上發現了相同的問題,http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/35c1ed09-f4a4-4b3d-bd46-35a11cb8a9bc。Column DisplayIndex滾動時不正確
這個問題似乎是因爲在右邊並且需要滾動才能看到它時,列沒有顯示在網格的初始顯示中。當列數足夠少以至於所有列都不會滾動時,那麼順序是正確的。如果添加了一列,以便其中一列需要滾動查看,則根據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;
}