Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net GridView中具有列跨度的标题列_Asp.net_Vb.net_Gridview - Fatal编程技术网

Asp.net GridView中具有列跨度的标题列

Asp.net GridView中具有列跨度的标题列,asp.net,vb.net,gridview,Asp.net,Vb.net,Gridview,例如,我希望我的标题如下所示: | Header Column | Header Column2 | |apple|Microsoft|Android|Dell|HP|Targus|Stack Overflow|Acer| Dim dt As New DataTable dt.Clear() dt.Columns.Add("apple") dt.Columns.Add("Microsoft") Dim mr As DataRo

例如,我希望我的标题如下所示:

|       Header Column           |      Header Column2      |
|apple|Microsoft|Android|Dell|HP|Targus|Stack Overflow|Acer|
Dim dt As New DataTable
dt.Clear()
    dt.Columns.Add("apple")
    dt.Columns.Add("Microsoft")
Dim mr As DataRow
    mr = dt.NewRow
    mr("apple") = "Macbook"
    mr("Microsoft") = "Surface Pro"
dt.Rows.Add(mr)
GridView1.DataSource = dt
GridView1.DataBind()
我添加列的VB代码如下所示:

|       Header Column           |      Header Column2      |
|apple|Microsoft|Android|Dell|HP|Targus|Stack Overflow|Acer|
Dim dt As New DataTable
dt.Clear()
    dt.Columns.Add("apple")
    dt.Columns.Add("Microsoft")
Dim mr As DataRow
    mr = dt.NewRow
    mr("apple") = "Macbook"
    mr("Microsoft") = "Surface Pro"
dt.Rows.Add(mr)
GridView1.DataSource = dt
GridView1.DataBind()

这可以在GridView的RowDataBound事件中完成。只需检查当前行是否为标题,如果是,则设置应跨越的单元格

首先确保GridView处理行数据绑定事件

<asp:GridView ID="GridView1" runat="server" OnRowDataBound="gridView1_RowDataBound">
    ...
</asp:GridView>

请记住,如果将来添加或删除任何列,这种硬编码可能会导致问题。

您可以尝试Repeater,它允许您进行自定义设计。在这种情况下,我将如何使用Repeater?您可以向Gridview添加额外的
HeaderRow
:我将如何在代码中使用标题行。我应该只添加一个标题列,然后将其添加到我的dt.rows中吗?还是我考虑过度了?你不能修改数据表。在gridview PreRender事件期间,向gridview内部表添加额外的标题行。我在上面的回答中有一个例子,所以这需要在PreRender中完成,因为如果数据源被缓存,数据绑定并不总是发生。@fnostro-有趣。虽然我不知道我是否完全明白。你指的是什么?如果是这样的话,我只是自己做了一个测试,看看它是如何工作的。我注意到无论是否使用缓存数据,它都会每次调用RowDataBound。你是说有时情况可能不是这样吗?这取决于你的设计。但是通常应该始终缓存数据源,可以使用
SqlDataSource
或类似的缓存控件,也可以在应用程序缓存中以编程方式进行缓存。但无论是否缓存,如果您总是调用
DataBind()
,则可以将其保留在RowDataBound中。如果您切换到缓存数据源(并停止手动调用
DataBind()
),则标题将消失。明白了,请对此问题进行投票,我将此标记为答案。这有帮助。因此,对于未来的客人,马克表示感谢