2012-12-07 22 views
0

我有多個運行時生成的datagridview控制和我想能夠看到用戶是否已經在特定的datagridview選擇多行。出於某種原因,以下結果始終爲零。當我F9停止該程序時,我可以看到此datagridview行的選定值爲false。任何想法如何解決這一問題?你如何正確使用GetRowCount方法具有多個運行時產生的datagridview的控制?

我的代碼如下:

strDGVName = "dgvCheckpoint" & intTimeModificationSender 

For Each tbp As TabPage In frmTimingP2P.tabctrlTimingTable.Controls 
    For Each dgv In tbp.Controls 
     If dgv.Name = strDGVName Then 
      intSelectedRowCount = dgv.Rows.GetRowCount(DataGridViewElementStates.Selected) 
     End If 
    Next 
Next 

感謝

現在我已經試過如下:

For Each tbp As TabPage In frmTimingP2P.tabctrlTimingTable.Controls 
    For Each ctrl As Control In tbp.Controls 
     Dim dgv As DataGridView = TryCast(ctrl, DataGridView) 
     If Not dgv Is Nothing Then 
      If dgv.Name = strDGVName Then 
       intSelectedRowCount = dgv.SelectedRows.Count 
      End If 
     End If 
    Next 
Next 

除了:

Dim c As Collections.Generic.IEnumerable(Of DataGridView) 
For p = 0 To frmTimingP2P.tabctrlTimingTable.TabCount - 1 
    c = frmTimingP2P.tabctrlTimingTable.TabPages(p).Controls.OfType(Of DataGridView)() 
    If c(0).Name = strDGVName Then p = frmTimingP2P.tabctrlTimingTable.TabCount 
    End If 
Next 
intSelectedRowCount = c(0).SelectedRows.Count 

但它仍然返回一個零行數。

+0

的GetRowCount方法只是正常在設計時創建的datagridview控件。 – J2Tuner

回答

1

好了,該解決方案如下:

兩個:

For Each tbp As TabPage In frmTimingP2P.tabctrlTimingTable.Controls 
    For Each ctrl As Control In tbp.Controls 
     Dim dgv As DataGridView = TryCast(ctrl, DataGridView) 
     If Not dgv Is Nothing Then 
      If dgv.Name = strDGVName Then 
       intSelectedRowCount = dgv.SelectedRows.Count 
      End If 
     End If 
    Next 
Next 

和:

Dim c As Collections.Generic.IEnumerable(Of DataGridView) 
For p = 0 To frmTimingP2P.tabctrlTimingTable.TabCount - 1 
    c = frmTimingP2P.tabctrlTimingTable.TabPages(p).Controls.OfType(Of DataGridView)() 
    If c(0).Name = strDGVName Then p = frmTimingP2P.tabctrlTimingTable.TabCount 
Next 
intSelectedRowCount = c(0).SelectedRows.Count 

正常工作。問題是,在我運行時生成的DataGridView控件,我並沒有將SelectionMode方法設置爲FullRowSelect,我是選擇單個細胞,這不能算作「行」。

感謝您的幫助!

+0

當然是啊。我總是有全面的選擇,所以沒想到:-) – WozzeC

1

這應該是你在找什麼:

dgv.SelectedRows.Count 
+0

此代碼是從所述形式分開的模塊中,並且在運行時產生的datagridview控制,所以必須通過的控件的集合,以搜尋先找到選擇哪個datagridview的,然後試圖找到所選擇的行。此時,選定的行保持返回零,並且當F9停止該程序時,我看到特定行的選定屬性爲false。我想知道如果我的代碼只會看到設計時創建的datagridview控件。 – J2Tuner

+0

它不會給我SelectedRows作爲dgv的方法。有沒有另外一種方法來實現這種方法?當我看到所選行計數程序暫停時,我可以看到,即使我在那個特定的DataGridView選擇了多個行,計數仍爲零。 – J2Tuner

+0

這可能是因爲dgv是一個控件。如果名稱匹配,請嘗試Dim tempDGV作爲DataGridView = CType(dgv,DataGridView)。然後執行tempDGV.SelectedRows。我覺得奇怪,這是行不通的。 – WozzeC

相關問題