none
计算datagridview行数问题 RRS feed

  • 问题

  •  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim count As Integer
            For i As Integer = 0 To DataGridView2.RowCount - 1
                If DataGridView2.SelectedRows(i).Visible <> False Then
                    count += 1
                End If
    
            Next
    
            MsgBox(count.ToString)
        End Sub
    我想要计算datagridview2的被选中的行数,由于我有一些行是隐藏的。当我执行上面的代码时,会产生错误。。
    2012年3月14日 7:56

答案

  • 此问题这样做:

    1)首先取消DataGridView的“允许添加”和“允许更新”设置:

    2)用Cast(扩展方法,只能在3.5下),或者尝试在循环中判断if(DataGridView.Rows(i).Visible),然后count+=1

    Public Class FormTemplate
        Private Sub FormTemplate_Load(sender As System.Objecte As System.EventArgsHandles MyBase.Load
            Dim dt As New DataTable
            dt.Columns.Add("Id"GetType(String))
            For index = 1 To 10
                dt.Rows.Add(index.ToString())
            Next
            DataGridView1.DataSource = dt
        End Sub

        Private Sub Button1_Click(sender As System.Objecte As System.EventArgsHandles Button1.Click
            ''隐藏一行
            DataGridView1.Rows(1).Visible = False
            '选中行的个数
            MessageBox.Show(DataGridView1.Rows.Cast(Of DataGridViewRow).Where(Function(rowrow.Visible = True).Count())
            '统计
        End Sub
    End Class


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 ckjason 2012年3月15日 1:11
    2012年3月14日 9:17
    版主

全部回复

  • 不可见的行照例是无法选中的,我不清楚你如何把“不可见”的行设置为选中状态,请给出这一部分的代码。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年3月14日 8:50
    版主
  • 不可见的行照例是无法选中的,我不清楚你如何把“不可见”的行设置为选中状态,请给出这一部分的代码。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    For i =0 to datagridview1.rowcount-1
       If datagridview1.row(i).cells(0).value<>"100" Then
            datagridview1.rows(i).visible=false
       Else
            datagridview1.rows(i).visible=true
            
        End If
        
    Next
    count=datagridview1.rowcount-1



    这是我原先的代码,但是运行这段代码,也是会计算“不可见”的行数。。

    • 已编辑 ckjason 2012年3月14日 9:15
    2012年3月14日 9:06
  • 此问题这样做:

    1)首先取消DataGridView的“允许添加”和“允许更新”设置:

    2)用Cast(扩展方法,只能在3.5下),或者尝试在循环中判断if(DataGridView.Rows(i).Visible),然后count+=1

    Public Class FormTemplate
        Private Sub FormTemplate_Load(sender As System.Objecte As System.EventArgsHandles MyBase.Load
            Dim dt As New DataTable
            dt.Columns.Add("Id"GetType(String))
            For index = 1 To 10
                dt.Rows.Add(index.ToString())
            Next
            DataGridView1.DataSource = dt
        End Sub

        Private Sub Button1_Click(sender As System.Objecte As System.EventArgsHandles Button1.Click
            ''隐藏一行
            DataGridView1.Rows(1).Visible = False
            '选中行的个数
            MessageBox.Show(DataGridView1.Rows.Cast(Of DataGridViewRow).Where(Function(rowrow.Visible = True).Count())
            '统计
        End Sub
    End Class


       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    • 已标记为答案 ckjason 2012年3月15日 1:11
    2012年3月14日 9:17
    版主