GridView RowDataBound事件未运行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GridView RowDataBound事件未运行相关的知识,希望对你有一定的参考价值。

我正在使用GridView,我正在使用TableAdapter与我的SQL Server 2017 Express进行通信。我已经设法将表显示到GridView中,但我想让我的数据库中的每个条目的名称都有一个超链接,该超链接将用户引导到包含DetailsView的另一个页面,该页面允许用户编辑相应的条目。但是,我目前在RowDataBoundEvent上遇到麻烦,因为它似乎没有触发。

当我在if语句中设置断点时,程序为does not stop at the breakpoint

protected void ProductViewRowBound(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.DataRow)
    {
        string hyperLink = e.Row.Cells[1].Text;
        e.Row.Cells[1].Text = "Test";
        //HyperLink link = new HyperLink;
    }
}

我检查了我的RowDataBound方法名称,它与我在aspx文件中指定的名称相匹配:

<asp:GridView ID="ProductView" runat="server" Height="299px" Width="578px" AllowPaging="True" HorizontalAlign="Center"
    OnRowDataBoundEvent="ProductViewRowBound" style="table-layout:auto">
    <HeaderStyle Width="300px" />
</asp:GridView>

CS档案:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;


public partial class Maintenance : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            DataTable dt = new DataTable();
            ProductSetTableAdapters.Product_Table_AlphaTableAdapter productAdapter = new ProductSetTableAdapters.Product_Table_AlphaTableAdapter();
            ProductView.DataSource = productAdapter.GetData();
            ProductView.DataBind();
        }

        ProductView.RowDataBound += new GridViewRowEventHandler(ProductViewRowBound);
    }

    protected void ProductViewRowBound(object sender, GridViewRowEventArgs e)
    {
        if(e.Row.RowType == DataControlRowType.DataRow)
        {
            string hyperLink = e.Row.Cells[1].Text;
            e.Row.Cells[1].Text = "Test";
            //HyperLink link = new HyperLink;
        }
    }
}

ASPX文件:

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Maintenance.aspx.cs" Inherits="Maintenance" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <div style="overflow-x:scroll;overflow-y:scroll; margin-left:auto; margin-right:auto;">
        <asp:GridView ID="ProductView" runat="server" Height="299px" Width="578px" AllowPaging="True" HorizontalAlign="Center"
            OnRowDataBoundEvent="ProductViewRowBound" style="table-layout:auto">
            <HeaderStyle Width="300px" />
        </asp:GridView>
    </div>

</asp:Content>

为什么我的RowDataBound事件没有运行,我该怎么做才能修复它?

答案

首先,OnRowDataBoundEvent不存在。它应该是GridView中的OnRowDataBound

<asp:GridView ID="ProductView" runat="server" OnRowDataBound="ProductViewRowBound">

接下来,您将正确的方法从后面的代码绑定到GridView,但是在将数据绑定到GridView之后。所以绑定productAdapter.GetData()时它不起作用。

因此要么在GridView aspx中设置正确的事件名称,要么在ProductView.DataBind();上面移动方法绑定

以上是关于GridView RowDataBound事件未运行的主要内容,如果未能解决你的问题,请参考以下文章

RowDataBound事件

在GridView的RowDataBound事件中获取某行某列的值!

GridView控件RowDataBound事件中获取列字段值的几种途径

GridView控件RowDataBound事件中获取列字段值的几种途径

Gridview 在 RowDataBound 上动态添加行,具有相同的 RowState(Alternate 或 Normal)

刷新页面时调用RowDataBound事件