比较DataTable和DataGridView以及DataGridView中的突出显示匹配行

时间:2019-01-22 12:25:45

标签: vb.net

我有一个数据库表,其中包含用户名及其当前活动位置的列表,即一个名为SEQUENCE的整数。

我将序列号列表放入一个只有一列的数据表中(例如“ SELECT SEQUENCE FROM TABLE”):

dtUsers = CLS_USERS.GetUsers(User)

它不包括当前用户,这就是为什么我在User中进行解析。

然后我要做的是遍历数据表,对于每个数字,我想将datagridview中的匹配行(也具有SEQUENCE列)设置为不同的颜色。这是我当前的代码:

For Each row As DataRow In dtUsers.Rows
    intSeq = row("SEQUENCE")
    For Each dgv_row As DataGridViewRow In dgvCandList.Rows
        If dgv_row.Cells("CURRENT_SQ").Value = intSeq Then
            dgv_row.DefaultCellStyle.BackColor = Color.Cyan
        Else 
           dgv_row.DefaultCellStyle.BackColor = Color.Grey
        End If
    Next
Next

但是,所有行都被突出显示,而不是仅突出显示dgv_row.Cells("SV_CURRENT_CAND_SQ").Value = intSeq的那些行……我已经验证了此循环是否正常工作,因此它必须是dgv_row.DefaultCellStyle.BackColor = Color.Cyan,这是不正确的?

如果是这样,我应该如何正确地分配特定DataGridRow的行背景色?

编辑:此代码正确运行,我的问题与该循环外的错误有关,该错误导致将背景色发送给所有内容,如果未将BackColor设置为默认值,则永远不要将其设置为默认值,如果它不在dtUsers中。

1 个答案:

答案 0 :(得分:-1)

DefaultCellStyle不是正确的属性,因为它是其他未设置样式的行的默认设置。您可以在客户端或服务器端实现基于行的样式。

客户端解决方案将是填充必要的输入值并适当地测试整数。 html行元素如下所示:

<tr runat="server" class=<%# If(Eval("x")=Eval("y"), "style1", "style2") %> >

其中“ style1”和“ style2”是包含您的颜色首选项的CSS元素。

服务器端的解决方案是使用RowDataBound方法并根据您的条件设置row.BackColor。