2013-02-27 51 views
0

我有一個DataGridView,我是有選擇地(反覆)從隱藏行,使用row.Visible的DataGridView沒有粉刷

void UpdateMessageWindow() 
{ 
    MessageDataGridView.CurrentCell = null; 
    foreach (DataGridViewRow row in MessageDataGridView.Rows) 
    { 
     row.Visible = DisplayedLevels.HasFlag((MessageLevel)row.Cells[3].Value); 
    } 
} 

我有一個問題,即添加行後,他們」直到你單擊單元格(重新繪製單擊的單元格),按下某個鍵或隱藏窗口之後纔會重新繪製。如果將鼠標移到DGV上,隨着光標的變化,您可以看到它們存在。

我敢肯定,我已經嘗試了DataGridView的相關探測方法的每個組合,但沒有任何幫助。

編輯: 我已經修改了它使用BindingSource.Filter,加入了「可見」列到DataSet表,設置messageBindingSource.Filter = "Visible",並改寫UpdateOutput到

void UpdateOutputWindow() 
{ 
    foreach (JobDataSet.MessagesRow row in _dataSet.Messages) 
    { 
     row.Visible = DisplayedLevels.HasFlag(row.Level); 
    } 
} 

,但它仍然顯示同樣的行爲。

+0

你不能應用行過濾器嗎?而不是迭代每一行?或者可能過濾數據源? – Derek 2013-02-27 16:05:23

+0

數據源是一個DataSet,它不支持過濾,'BindingSource.Filter'等不支持按位運算符。 – RoadieRich 2013-02-27 16:12:05

+0

你不能使用DataView和DataSets? – Derek 2013-02-27 16:30:36

回答

0

我找到了答案是一個處理程序添加到DataTable.RowChanged事件:

_dataSet.Messages.RowChanged += delegate 
           { 
            MessageDataGridView.Invalidate(); 
            MessageDataGridView.Update(); 
           }; 

這也可能是低效率的,但它的作品。

+0

很高興你把它分類。 – 2013-03-01 08:08:23

0

嘗試聚焦在DataGridView有:

MessageDataGridView.Focus(); 
+0

不是:/。我應該補充一點,您需要單擊DGV的每個單元以使其重新繪製。 – RoadieRich 2013-02-27 16:06:41

+0

您的DataGridView綁定到一個DataSource? – 2013-02-27 16:08:08

+0

是的,綁定到一個DataSet,然後綁定到一個BindingSource。我會使用'BindingSource.Filter',但它不支持按位運算符。 – RoadieRich 2013-02-27 16:10:54