gpt4 book ai didi

c# - ASP.NET GridView 第二个标题行跨越主标题行

转载 作者:IT王子 更新时间:2023-10-29 04:08:15 24 4
gpt4 key购买 nike

我有一个 ASP.NET GridView,它的列如下所示:

| Foo | Bar | Total1 | Total2 | Total3 |

是否可以像这样在两行上创建标题?

|           |  Totals   |    
| Foo | Bar | 1 | 2 | 3 |

每行中的数据将保持不变,因为这只是为了美化标题并减少网格占用的水平空间。

整个 GridView 都是可排序的,以防万一。我不打算让添加的“总计”跨越列具有任何排序功能。

编辑:

根据下面给出的一篇文章,我创建了一个继承自 GridView 的类,并在其中添加了第二个标题行。

namespace CustomControls
{
public class TwoHeadedGridView : GridView
{
protected Table InnerTable
{
get
{
if (this.HasControls())
{
return (Table)this.Controls[0];
}

return null;
}
}

protected override void OnDataBound(EventArgs e)
{
base.OnDataBound(e);
this.CreateSecondHeader();
}

private void CreateSecondHeader()
{
GridViewRow row = new GridViewRow(0, -1, DataControlRowType.Header, DataControlRowState.Normal);

TableCell left = new TableHeaderCell();
left.ColumnSpan = 3;
row.Cells.Add(left);

TableCell totals = new TableHeaderCell();
totals.ColumnSpan = this.Columns.Count - 3;
totals.Text = "Totals";
row.Cells.Add(totals);

this.InnerTable.Rows.AddAt(0, row);
}
}
}

如果您像我一样是 ASP.NET 的新手,我还应该指出您需要:

1) 通过在您的网络表单中添加如下一行来注册您的类(class):

<%@ Register TagPrefix="foo" NameSpace="CustomControls" Assembly="__code"%>

2) 将之前标记中的 asp:GridView 更改为 foo:TwoHeadedGridView。不要忘记结束标记。

另一个编辑:

您也可以在不创建自定义类的情况下执行此操作。

只需为网格的 DataBound 事件添加一个事件处理程序,如下所示:

protected void gvOrganisms_DataBound(object sender, EventArgs e)
{
GridView grid = sender as GridView;

if (grid != null)
{
GridViewRow row = new GridViewRow(0, -1,
DataControlRowType.Header, DataControlRowState.Normal);

TableCell left = new TableHeaderCell();
left.ColumnSpan = 3;
row.Cells.Add(left);

TableCell totals = new TableHeaderCell();
totals.ColumnSpan = grid.Columns.Count - 3;
totals.Text = "Totals";
row.Cells.Add(totals);

Table t = grid.Controls[0] as Table;
if (t != null)
{
t.Rows.AddAt(0, row);
}
}
}

自定义控件的优点是您可以在 Web 表单的设计 View 上看到额外的标题行。不过,事件处理程序方法稍微简单一些。

最佳答案

我采用了公认的答案方法,但将 header 添加到现有的 GridView 而不是自定义继承的 GridView。

绑定(bind) GridView 后,我执行以下操作:

/*Create header row above generated header row*/

//create row
GridViewRow row = new GridViewRow(0, -1, DataControlRowType.Header, DataControlRowState.Normal);

//spanned cell that will span the columns I don't want to give the additional header
TableCell left = new TableHeaderCell();
left.ColumnSpan = 6;
row.Cells.Add(left);

//spanned cell that will span the columns i want to give the additional header
TableCell totals = new TableHeaderCell();
totals.ColumnSpan = myGridView.Columns.Count - 3;
totals.Text = "Additional Header";
row.Cells.Add(totals);

//Add the new row to the gridview as the master header row
//A table is the only Control (index[0]) in a GridView
((Table)myGridView.Controls[0]).Rows.AddAt(0, row);

/*fin*/

关于c# - ASP.NET GridView 第二个标题行跨越主标题行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/314736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com