C# 缩进datagridview的某些行

C# 缩进datagridview的某些行,c#,ms-access,datagridview,C#,Ms Access,Datagridview,我有一个WinForms应用程序,它使用查询从Access中的表中读取一些数据,并将其打印到datagridview。我只是想知道是否有任何可能的方法,我可以缩进或突出显示一行匹配的“序列号”。应该有两个匹配的“序列号”,但我只想缩进或突出显示其中一个。这是我的东西如果有什么帮助的话 ad.SelectCommand = new OleDbCommand("SELECT b.RSV_CAT, b.SEQNUM, b.LEASE, b.WELL_ID, a.QUALIFIER, a.KEYWOR

我有一个WinForms应用程序,它使用查询从Access中的表中读取一些数据,并将其打印到datagridview。我只是想知道是否有任何可能的方法,我可以缩进或突出显示一行匹配的“序列号”。应该有两个匹配的“序列号”,但我只想缩进或突出显示其中一个。这是我的东西如果有什么帮助的话

ad.SelectCommand = new OleDbCommand("SELECT b.RSV_CAT, b.SEQNUM, b.LEASE,  b.WELL_ID, a.QUALIFIER, a.KEYWORD, a.EXPRESSION FROM [AC_ECONOMIC] a INNER JOIN [AC_PROPERTY] b on a.PROPNUM=b.PROPNUM WHERE a.KEYWORD = '" + end + "' AND a.QUALIFIER = '" +qual+ "' AND a.EXPRESSION LIKE 'SN%'", con); 

ad3.SelectCommand = new OleDbCommand("SELECT b.RSV_CAT, b.SEQNUM, b.LEASE,  b.WELL_ID, a.QUALIFIER, a.KEYWORD, a.EXPRESSION FROM [AC_ECONOMIC] a INNER JOIN [AC_PROPERTY] b on a.PROPNUM=b.PROPNUM WHERE a.KEYWORD = '" + start + "' AND a.QUALIFIER = '" + qual + "' AND a.EXPRESSION LIKE 'SN%'", con3);
我想用
start
变量或
ad3缩进或突出显示查询。选择Command
。任何帮助都将不胜感激

这里还有一些我的
dataGridView
代码,可以去掉边界

private void newWindow_Load(object sender, EventArgs e)
{            
    this.dataGridView3.AdvancedCellBorderStyle.Left = DataGridViewAdvancedCellBorderStyle.None;
    this.dataGridView3.AdvancedCellBorderStyle.Right = DataGridViewAdvancedCellBorderStyle.None;

    this.dataGridView3.AdvancedCellBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None;
    this.dataGridView3.AdvancedCellBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None;

    dataGridView3.DataSource = ((Form1)frm1).ds.Tables[0];
}

好的,这是一个非常简单的Winforms DatagridView示例,它在满足特定条件时在单元格上循环并高亮显示行。到目前为止,这是您需要的确切解决方案,但可以给您一个指导原则:-)


我在玩指南示例,并对迭代单元格的最后一部分使用了不同的方法。(VB语言)


我不确定在不亲自处理绘图的情况下是否进行缩进,但您可以根据自己的喜好格式化(例如,设置颜色)单元格、行甚至列。@有没有办法只对ad3查询进行缩进?我可以通过在循环中遍历DataGridView并识别符合条件的单元格来完成缩进。稍后我将发布一个示例。我附上了一个关于如何检查DataGridView的非常简单的示例。您可以进一步了解这一点,但这可能足以将您推向正确的方向。这确实提供了指导,但我如何只突出显示datagrid中的一个匹配值?很抱歉问了这么多问题。
//Creation of DataTable
DataTable t = new DataTable("myTable");
t.Columns.Add(new DataColumn("Field1", typeof(string)));
t.Columns.Add(new DataColumn("Field2", typeof(int)));
t.Columns.Add(new DataColumn("Field3", typeof(string)));
t.Columns.Add(new DataColumn("Field4", typeof(string)));

//Adding test data to DataTable
t.Rows.Add(new object[] { "Value1", 300, "Test1", "Test2" });
t.Rows.Add(new object[] { "Value2", 1100, "Test3", "Test4" });
t.Rows.Add(new object[] { "Value3", 900, "Test5", "Test6" });
t.Rows.Add(new object[] { "Value4", 100, "Test7", "Test8" });
t.Rows.Add(new object[] { "Value5", 1200, "Test9", "Test10" });

//Creation of DataSet
DataSet s = new DataSet();
s.Tables.Add(t);

//Assigning DataSet to DataGridView (here's where you start looking)
dataGridView1.DataSource = s;
dataGridView1.DataMember = "myTable";

foreach (DataGridViewRow r in dataGridView1.Rows)
{
    foreach (DataGridViewCell c in r.Cells)
    {
        if (c != null && c.Value != null) //to avoid blank or 'new' rows
        {
            if (c.OwningColumn.Name == "Field2" && (int)c.Value > 1000)
            {
                foreach (DataGridViewCell cell in c.OwningRow.Cells)
                {
                    cell.Style.BackColor = Color.Aquamarine;
                }
            }
        }
    }
}
    Dim tbl As DataTable = New DataTable
    tbl.Columns.Add("Field1") ' default type of String
    tbl.Columns.Add("Field2", GetType(System.Int32))
    tbl.Columns.Add("Field3")
    tbl.Columns.Add("Field4")
    'Adding test data to DataTable
    tbl.Rows.Add(New Object() {"Value1", 300, "Test1", "Test2"})
    tbl.Rows.Add(New Object() {"Value2", 1100, "Test3", "Test4"})
    tbl.Rows.Add(New Object() {"Value3", 900, "Test5", "Test6"})
    tbl.Rows.Add(New Object() {"Value4", 100, "Test7", "Test8"})
    tbl.Rows.Add(New Object() {"Value5", 1200, "Test9", "Test10"})

    ' alternate way to add and address data, second column left as DbNull
    Dim x As DataRow

    x = tbl.NewRow
    x(0) = "Val x"
    x("Field3") = "test"
    x!Field4 = "xyzzy"
    tbl.Rows.Add(x)

    For i As Int32 = 1 To 5 ' add more data
        x = tbl.NewRow
        x(0) = "Val x"
        x!Field2 = i * 250
        x("Field3") = "test"
        x!Field4 = "xyzzy"
        tbl.Rows.Add(x)
    Next

    'Assigning DataTable to DataGridView DataSource
    DataGridView1.DataSource = tbl
    DataGridView1.ClearSelection()

    For Each r As DataGridViewRow In DataGridView1.Rows
        If Not IsDBNull(r.Cells("field2").Value) AndAlso CInt(r.Cells("Field2").Value) > 1000 Then
            For Each cell As DataGridViewCell In r.Cells
                cell.Style.BackColor = Color.Aquamarine
            Next
        End If
    Next