You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASPX+VB.NET中GridView隐藏列:RowDataBound事件未触发

解决方案

1. 解决ID和LinkAUX列自动显示的问题

GridView默认AutoGenerateColumns="True",会自动生成数据源(DataTable)中所有字段对应的列。要只显示指定列,需做两处修改:

步骤1:关闭自动生成列

在GridView标签中添加AutoGenerateColumns="False":

<asp:GridView ID="gridViewArtifacts"
    runat="server"
    AutoGenerateColumns="False" <%-- 新增这一行 --%>
    CssClass="grid-margin"
    Style="margin-top: 4px; text-align: Justify; max-height: 200px;"
    Width="100%"
    BackColor="White"
    BorderColor="#CCCCCC"
    BorderStyle="None"
    BorderWidth="1px"
    CellPadding="3"
    OnRowDataBound="gridViewArtifacts_RowDataBound"
    OnRowCreated="gridViewArtifacts_RowCreated"
    OnRowCommand="gridViewArtifacts_RowCommand">

步骤2:手动添加需要显示的列

在<Columns>节点中,补充Title、Category、Status的绑定列:

<Columns>
    <%-- 原有的复选框列 --%>
    <asp:TemplateField>
        <HeaderTemplate>
            <asp:CheckBox ID="chkAll" runat="server" onclick="checkAll(this);" />
        </HeaderTemplate>
        <ItemTemplate>
            <asp:CheckBox ID="chkSelect" runat="server" OnCheckedChanged="gridViewArtifacts_CheckedChanged" AutoPostBack="true" />
        </ItemTemplate>
    </asp:TemplateField>
    <%-- 原有的Identifier列 --%>
    <asp:TemplateField HeaderText="Identifier">
        <ItemTemplate>
            <asp:HyperLink ID="hyperLinkID" runat="server" 
                NavigateUrl='<%# Eval("LinkAUX") %>' <%-- 修正大小写匹配DataTable列名 --%>
                Text='<%# Eval("ID") %>' 
                Target="_blank" />
        </ItemTemplate>
    </asp:TemplateField>
    <%-- 新增以下三个绑定列 --%>
    <asp:BoundField DataField="Title" HeaderText="Title" />
    <asp:BoundField DataField="Category" HeaderText="Category" />
    <asp:BoundField DataField="Status" HeaderText="Status" />
</Columns>

2. 解决RowDataBound事件未触发的问题

步骤1:确保数据绑定只在首次加载时执行

在Page_Load事件中添加IsPostBack判断,避免回发时重复绑定导致事件异常:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        ' 原有的DataTable创建和绑定代码
        Dim artifactTable As New DataTable()
        artifactTable.Columns.Add("Title")
        artifactTable.Columns.Add("Category")
        artifactTable.Columns.Add("Status")
        artifactTable.Columns.Add("ID")
        artifactTable.Columns.Add("LinkAUX")

        artifactTable.Rows.Add(title, Category, hwStatusFinal, artifactId, artifactLink)
        gridViewArtifacts.DataSource = artifactTable
        gridViewArtifacts.DataBind()
    End If
End Sub

步骤2:修正RowDataBound事件中的字段名错误

原代码中使用了不存在的LinkURL字段,需改为DataTable中的LinkAUX,同时优化代码逻辑:

Protected Sub gridViewArtifacts_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles gridViewArtifacts.RowDataBound
    If e.Row.RowType = DataControlRowType.DataRow Then
        ' 处理复选框点击事件
        Dim chk As CheckBox = CType(e.Row.FindControl("chkSelect"), CheckBox)
        chk?.Attributes.Add("onclick", "checkBoxClicked()")

        ' 处理超链接
        Dim hyperLinkID As HyperLink = CType(e.Row.FindControl("hyperLinkID"), HyperLink)
        If hyperLinkID IsNot Nothing Then
            hyperLinkID.NavigateUrl = DataBinder.Eval(e.Row.DataItem, "LinkAUX").ToString()
            hyperLinkID.Text = DataBinder.Eval(e.Row.DataItem, "ID").ToString()
        End If
    End If
    gridViewArtifacts.EnablePersistedSelection = True
End Sub

额外说明

  • 字段名大小写需严格匹配:DataTable中的列名是LinkAUX,所以Eval时要保持一致,避免找不到字段导致的错误。
  • 若RowDataBound仍未触发,可检查GridView的OnRowDataBound属性是否与后台方法名完全一致,确保没有拼写错误。

内容的提问来源于stack exchange,提问作者Rui Soares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:54:54