【问题标题】:How to group rows in datagridview with subheadings in vb.net如何使用 vb.net 中的子标题对 datagridview 中的行进行分组
【发布时间】:2025-12-29 10:50:11
【问题描述】:

我在如何将 datagridview 中的行与 vb.net 中的子标题进行分组时遇到问题。我希望我的 datagridview 有一个副标题。我已将此 C# 代码转换为 VB.NET,但没有任何反应:

private string subheading = "";
private bool createsub = false;
// This method will peek ahead in the datasource to determine whether the 
   next
 // item will need a new subheading
 private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs 
e)
{
switch (e.Item.ItemType)
{
case ListItemType.Header:
case ListItemType.AlternatingItem:
case ListItemType.Item:
 DataTable dt = (DataTable)((DataGrid)sender).DataSource;
// header or Subheading column value will change in next row
if ((e.Item.ItemIndex == -1) ||
(e.Item.ItemIndex+1 < dt.Rows.Count &&
dt.Rows[e.Item.ItemIndex+1]["SubHeading"].ToString() !=
dt.Rows[e.Item.ItemIndex]["SubHeading"].ToString()))
{
 // get next subheading value
 subheading = dt.Rows[e.Item.ItemIndex+1]["SubHeading"].ToString();
 createsub = true;
 }
else
createsub = false;
break;
}
}
// This method will create a subheading row if needed
private void DataGrid1_ItemCreated(object sender, DataGridItemEventArgs e)
{
switch (e.Item.ItemType)
{
case ListItemType.AlternatingItem:
case ListItemType.Item:
if (createsub)
{
DataGrid dg = (DataGrid)sender;
TableCell tc = new TableCell();
tc.Controls.Add(new LiteralControl(subheading));
tc.ColumnSpan = e.Item.Cells.Count;
tc.Attributes.Add("align", "left");
tc.Font.Bold = true;
tc.BackColor = Color.FromArgb(220, 220, 220);
DataGridItem di =
new DataGridItem(e.Item.ItemIndex+1, 0, ListItemType.Item);
di.Cells.Add(tc);
Table t = (Table)dg.Controls[0];
t.Rows.Add(di);
}
break;
default:
break;
}
}

此代码用于获取具有相同结果的附加信息:

private void SeparateRows(ref DataSet ds, string columnName)
{
int i = 0;
string prevsub = "";
while (i <= ds.Tables[0].Rows.Count - 1)
{
DataRow dr = ds.Tables[0].Rows[i];
// if category field value changes add a new row
if (dr["Category"].ToString() != prevsub)
{
prevsub = sub;
DataRow newrow = ds.Tables[0].NewRow();
newrow["Title"] = "SubHeading"; // sub heading flag
newrow[columnName] = dr[columnName]; // sub heading text
// add row and increment counter to accommodate new row
ds.Tables[0].Rows.InsertAt(newrow, i++);
}
i++;
}
}


private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
{
switch (e.Item.ItemType)
{
case ListItemType.AlternatingItem:
case ListItemType.Item:
if (e.Item.Cells[1].Text.Equals("SubHeading"))

尝试打开我上传的这张图片进行澄清:

Grouping Datagridview rows

我真的需要一些帮助来实现这一点。请帮忙..谢谢

【问题讨论】:

  • 你确定这是 VB.NET 吗? ;-)
  • Datagrid 与 datagridview 不同
  • 哦,很抱歉它的 ASP.NET 代码。他们有什么方法可以在 vb.net 代码中做到这一点吗?如果有,请与我分享一些代码。谢谢

标签: vb.net sql-server-2012


【解决方案1】:

我找到了一些解决方案。

这是我的代码。

Private Sub dgvCurriculum_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles dgvCurriculum.CellFormatting
    If e.RowIndex > 0 And e.ColumnIndex = 0 Then
        If dgvCurriculum.Item(0, e.RowIndex - 1).Value = e.Value Then
            e.Value = ""
        ElseIf e.RowIndex < dgvCurriculum.Rows.Count - 1 Then
            dgvCurriculum.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.White
        End If
    End If
End Sub

它并没有完全解决我的问题,但它稍微减轻了我的追求。

【讨论】: