【问题标题】:How to Handle Events of User Control Grid View?如何处理用户控件网格视图的事件?
【发布时间】:2018-06-01 11:34:04
【问题描述】:

我有一个用户控件作为网格视图。 我正在动态添加它...我已经为数据源创建了方法,但是我无法使用网格视图的其他事件,例如 "Row_Data_Bound" 等。

我在网上看到了创建代表并添加以下代码的代码

protected void Simple_DGV_RowDataBound(object sender, GridViewRowEventArgs e)   
{
OnRowDataBound(e);
}

但我在此处收到错误提示 名称 OnRowDataBound 在当前上下文中不存在

谁能帮我访问父页面中用户控件网格视图的事件

编辑:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserControl1.ascx.cs" Inherits="ProjectManagement.UserControl.User1" %>
<div>
<asp:GridView ID="ucGridView" runat="server" SkinID="gvSchedulerSkin" AllowSorting="false" OnRowDataBound="ucGridView_RowDataBound">
   <RowStyle Width="20px" /> 
</asp:GridView>
</div>

这是我的 ascx 页面...我想在多个地方(在运行时)使用此网格视图,所以我创建了一个用户控件... 基本上我想从我的代码后面调用这个用户控件,然后使用它的rowdatabound我想将数据与gridview绑定..

我在网站上看到它说使用事件冒泡......但我不知道如何实现。

所以你能在这件事上提供帮助吗..这样我就可以像我一样正常使用 rowdatabound

提前

【问题讨论】:

  • OnRowDataBound 在哪里声明?如果您从示例中获取此信息,那么您需要该方法的代码。否则,只需将您需要做的任何事情的代码放在 Simple_DGV_RowDataBound 方法本身中。
  • 我在这里看到了代码codeproject.com/Articles/19345/…
  • 实际上我想访问创建的 gridview 的 RowDataBound ..但是由于我的网格视图是用户控件,我需要定义 rowdatabound ...我该怎么做?
  • 如果你看代码项目的第8步,你可以看到你需要的方法的实现!另外,您的意思是您有一个包含 GridView 的用户控件吗?或者您的用户控件是一个 GridView,但您从 GridView 继承来创建自己的。
  • 编辑了我的问题...希望现在它清楚了

标签: c# asp.net gridview user-controls


【解决方案1】:

我已经在本地创建了一个项目,这没关系。

我有一个名为 TestUserControl.ascx 的控件。我在设计模式下将一个 GridView 控件拖到用户控件上,并将其命名为“grdControlsGrid”。

这产生了以下标记。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestUserControl.ascx.cs" Inherits="TestASPNet.TestUserControl" %>
<asp:GridView ID="grdControlsGrid" runat="server">
</asp:GridView>

然后我通过在 runat="server" 之后将“OnRowDataBound=" 输入到 hmtl 来添加事件 OnRowDataBound。当您点击 equals 时,您可以选择为此事件创建方法。双击“创建方法”选项,这将为您将事件连接到方法。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestUserControl.ascx.cs" Inherits="TestASPNet.TestUserControl" %>
<asp:GridView ID="grdControlsGrid" runat="server" OnRowDataBound="grdControlsGrid_OnRowDataBound">
</asp:GridView>

此代码现在按照以下代码驻留在您的用户控件中。

或者,您可以在用户控件加载中自行连接事件。

 public partial class TestUserControl : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //Manually Add event handler
            grdControlsGrid.RowDataBound += GrdControlsGrid_RowDataBound;
        }

        private void GrdControlsGrid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //Manually bound event
        }

        protected void grdControlsGrid_OnRowDataBound(object sender, GridViewRowEventArgs e)
        {
            //Auto wired event
        }
    }

由于某种原因,当通过标记自动连接时,您会收到事件“OnRowDataBound”.. 但是当在后面的代码中手动完成时,您会收到“RowDataBound”。我的猜测是它们是相同的。但也许其他人可以阐明这一点。

希望对您有所帮助。

【讨论】:

  • 是的,我也在网上搜索...然后幸运的是,现在逻辑可以正常工作。如果有人希望控件动态加载,那么他们应该使用替代方法,因为我们不会创建硬编码控件。感谢您的努力
  • @rk - 没问题。很高兴您找到了解决方案。干杯
猜你喜欢
  • 1970-01-01
  • 2021-09-14
  • 2017-10-12
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2011-02-25
  • 2019-02-08
  • 1970-01-01
相关资源
最近更新 更多