【发布时间】: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"))
尝试打开我上传的这张图片进行澄清:
我真的需要一些帮助来实现这一点。请帮忙..谢谢
【问题讨论】:
-
你确定这是 VB.NET 吗? ;-)
-
Datagrid 与 datagridview 不同
-
哦,很抱歉它的 ASP.NET 代码。他们有什么方法可以在 vb.net 代码中做到这一点吗?如果有,请与我分享一些代码。谢谢