2012-10-15 67 views
1

我正在使用DataGridView,並遇到問題,有時根據DisplayIndex按正確順序顯示列。我在其他網站上發現了相同的問題,http://social.msdn.microsoft.com/Forums/en-US/winformsdatacontrols/thread/35c1ed09-f4a4-4b3d-bd46-35a11cb8a9bcColumn 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; 
} 

回答

0

好了,因爲沒有人回答,我給的更新 - 我沒有花時間來解決這個問題。它被認爲是一個足夠低的優先級,如果有的話,我可能不會達到它幾個月。

自從原始帖子以來,我發現一條有趣的信息是,修改某列的顯示索引號時,其餘列會自動更改以解釋它。當我閱讀msdn文檔時,這對我來說並不明顯,所以也許這會對其他人陷入困境有所幫助。