基于SQL语句格式化数据网格

时间:2015-01-16 11:28:10

标签: sql sql-server vb.net datagridview

我正在尝试格式化一些datagridview行,具体取决于它们是否出现在SQL select语句中。

到目前为止,这是我的代码。

我有一个功能来检查条件是否为真。

Public Shared Function checkdata(ByVal row As Integer) As Boolean

    Dim da As SqlDataReader

    Using conn As New SqlClient.SqlConnection("server=inlt01\SQLEXPRESS; database=DaisyServices; integrated security=yes")
        Using cmd As SqlClient.SqlCommand = conn.CreateCommand()

            cmd.CommandText = "SELECT * FROM [DaisyServices].[dbo].[DaisyServicesIndigo] i JOIN [DaisyServices].[dbo].[DaisyServicesIndigo] i2 on i.cli = i2.cli and i.quantity = i2.quantity and i.unitcost = i2.unitcost and i.totalcost = i2.totalcost and i.[description] = i2.[description] and ((i.FromDate <= i2.ToDate)  and  (i.ToDate >= i2.FromDate)) WHERE i.id<>i2.id "
            conn.Open()

            da = cmd.ExecuteReader
            If da.HasRows Then
                Return True
            Else
                Return False
            End If
        End Using
    End Using

End Function

IF语句来检查每一行。

    For intcount = 0 To DaisyServicesForm.DataGridView2.Rows.Count - 1

        If checkdata(intcount) = True Then
            DaisyServicesForm.DataGridView2.Rows(intcount).DefaultCellStyle.ForeColor = Color.Blue
        End If
    Next

问题是我的DataGridView中的所有行都是蓝色。

如果我运行SQL,我只得到2个结果。

我的目标是在SQL语句中返回的2行在DataGridView上使用前蓝色进行格式化。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

将检查功能更改为此并尝试 公共共享函数checkdata(ByVal row As Integer)As Boolean

    Dim da As SqlDataReader

    Using conn As New SqlClient.SqlConnection("server=inlt01\SQLEXPRESS; database=DaisyServices; integrated security=yes")
        Using cmd As SqlClient.SqlCommand = conn.CreateCommand()

            cmd.CommandText = "SELECT * FROM [DaisyServices].[dbo].[DaisyServicesIndigo] i JOIN [DaisyServices].[dbo].[DaisyServicesIndigo] i2 on i.cli = i2.cli and i.quantity = i2.quantity and i.unitcost = i2.unitcost and i.totalcost = i2.totalcost and i.[description] = i2.[description] and ((i.FromDate <= i2.ToDate)  and  (i.ToDate >= i2.FromDate)) WHERE i.id<>i2.id "
            conn.Open()

            da = cmd.ExecuteReader
            If da.HasRows Then
            while da.read
     if da!fieldindatabase=datagridview.rows(intcount).columns(yourfield)
         return true
     Else
         Return False
     End If
            end while
         End Using
    End Using

 End Function

这里给出了'fieldindatabase'从数据库获得的值以及'youfield'的datagrid中相应字段的列。

注意:

不幸的是,这段代码将对datagrid中的每一行执行select查询。为了防止这种情况,您可以使用查询来填充可以在函数内部访问的数据表,这样它只会执行一次(以改善表现并减少延迟)。