“组合式”Server控件中包含的DataGrid对象,无法响应一些事件

sinzy 2003-09-01 06:08:25
我要以创建“组合式”控件的方式,给DataGrid控件增加一些功能,我的控件的重载的CreateChildControls()方法中写了如下的代码(大致):
this.m_dataGrid1 = new DataGrid()

// “编辑”列
EditCommandColumn eccCol = new EditCommandColumn();
eccCol.HeaderText = "编辑";
eccCol.EditText = "[E]";
eccCol.UpdateText = "[U]";
eccCol.CancelText = "[C]";
m_dgrdShow.Columns.Add(eccCol);

// “删除”列
ButtonColumn btnCol = new ButtonColumn();
btnCol.HeaderText = "删除";
btnCol.CommandName = "delete";
btnCol.Text = "[D]";
m_dgrdShow.Columns.Add(btnCol);

// DataGrid 事件……
m_dgrdShow.ItemCommand += new DataGridCommandEventHandler(m_dgrdShow_ItemCommand);
m_dgrdShow.CancelCommand += new DataGridCommandEventHandler(m_dgrdShow_CancelCommand);
m_dgrdShow.EditCommand += new DataGridCommandEventHandler(m_dgrdShow_EditCommand);
m_dgrdShow.UpdateCommand += new DataGridCommandEventHandler(m_dgrdShow_UpdateCommand);
m_dgrdShow.ItemDataBound += new DataGridItemEventHandler(m_dgrdShow_ItemDataBound);

BuildDataGrid(); // 生成一些显示数据的BoundColumn列对象并添加到DataGrid的列集合中
BindDataGrid(); // 绑定数据

this.Controls.Add(this.m_dgrdShow);

现在,我可以正常的显示数据,并能够响应EditCommand事件,但是UpdateCommand和CancelCommand事件则无法响应(用断点测试得知)……

郁闷无比,请各位高人指点~

我觉得问题原因可能是页面事件引发顺序的问题,我的自定义控件少了一道什么工序……
...全文
87 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwgj 2003-09-02
  • 打赏
  • 举报
回复
学习
sinzy 2003-09-02
  • 打赏
  • 举报
回复
谢谢大家!
现在问题基本解决,原因是我在派生WebControl时实现了一个INamingContainer接口,去掉这个接口实现就可以响应事件了。实现接口的原因是看了一本参考书上关于“组合式”控件的说明……ft...

不知道有没有人愿意详细说明一下这个接口的实际应用?
saucer 2003-09-02
  • 打赏
  • 举报
回复
here is a contrived example

1. TestGrid.aspx:

<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb" Inherits="WebApplication5.WebForm2"%>
<%@ Register TagPrefix="cc1" Namespace="CustomControls" Assembly="CustomControls" %>
<form runat=server>
<cc1:MyDataGrid id="MyDataGrid1" runat="server" Width="249px" Height="79px"></cc1:MyDataGrid>
</form>

...
2. WebForm2.aspx.vb:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
If Not IsPostBack Then
MyDataGrid1.DataBind()
End If
End Sub


3. MyDataGrid.cs: (compile it into CustomControls.dll)
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Data.SqlClient;
using System.Data;

namespace CustomControls
{
[ToolboxData("<{0}:MyDataGrid runat=server></{0}:MyDataGrid>")]
public class MyDataGrid : System.Web.UI.WebControls.WebControl
{
Button m_btn;
DataGrid m_dg;

protected override void CreateChildControls()
{
m_btn = new Button();
m_btn.Text = "click me";
m_btn.Click += new EventHandler(Button_Clicked);
Controls.Add(m_btn);

m_dg = new DataGrid();
Controls.Add(m_dg);

EditCommandColumn ecc = new EditCommandColumn();
ecc.HeaderText = "Command";
ecc.EditText = "Edit";
ecc.UpdateText = "Update";
ecc.CancelText = "Cancle";
m_dg.Columns.Add(ecc);

m_dg.EditCommand += new DataGridCommandEventHandler(MyDataGrid_Edit);
m_dg.UpdateCommand += new DataGridCommandEventHandler(MyDataGrid_Update);
m_dg.CancelCommand += new DataGridCommandEventHandler(MyDataGrid_Cancel);

}

void Button_Clicked (Object o, EventArgs e)
{
Page.Response.Write(String.Format("button in MyDataGrid is clicked at {0}", DateTime.Now));
}

public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs e)
{
Page.Response.Write("**** in MyDataGrid_Edit ****");
m_dg.EditItemIndex = (int)e.Item.ItemIndex;
BindGrid();
}

public void MyDataGrid_Cancel(Object sender, DataGridCommandEventArgs e)
{
Page.Response.Write("**** in MyDataGrid_Cancel ****");
m_dg.EditItemIndex = -1;
BindGrid();
}

public void MyDataGrid_Update(Object sender, DataGridCommandEventArgs e)
{
Page.Response.Write("**** in MyDataGrid_Update ****");
m_dg.EditItemIndex = -1;
BindGrid();
}

void BindGrid()
{
SqlDataAdapter da = new SqlDataAdapter("select * from authors", "server=(local);database=pubs;uid=sa;pwd=;");

DataTable dt = new DataTable();
da.Fill(dt);

m_dg.DataSource=dt.DefaultView;
m_dg.DataBind();
}

public override void DataBind()
{
EnsureChildControls();
BindGrid();
}

protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
EnsureChildControls();
}
}
}

webdiyer 2003-09-01
  • 打赏
  • 举报
回复
点击一个编辑按钮后,不要点击取消或更新,再点击另一个编辑按钮,这个编辑按钮还会不会正确响应事件??
steveson 2003-09-01
  • 打赏
  • 举报
回复
检查一下
EditCommand、UpdateCommand和CancelCommand事件
中执行了:
m_dataGrid1.DataBind()没有

另外:
UpdateCommand和CancelCommand事件
需要指定
m_dataGrid1.EditItemIndex = -1;
源码下载地址: https://pan.quark.cn/s/572a538835a2 ### 关于VOC2012训练数据集的说明 #### 1. 数据集的基本介绍 VOC2012(Visual Object Classes 2012)是Pascal VOC挑战赛的一个重要组成部分,该挑战赛被视为一种广泛应用的图像识别和物体检测基准数据集。VOC2012主要应用于衡量计算机视觉算法在对象分类、定位以及检测任务上的表现水平。它包含了大量经过标注的图像,这些图像涉及多个不同的类别,并且图像的每一个对象都经过了细致的标记处理。 #### 2. 数据集的主要特性 - **丰富性**:VOC2012数据集收集了20个不同的类别,涵盖了诸如汽车、自行车、鸟类、猫科动物、椅子等常见的物体。 - **容量**:该数据集总共包含了约5000张用于训练的图像和约5000张用于验证的图像。 - **详细标注**:每张图像对象都经过了详尽的标注,包括对象的边界框和类别标识。 - **普遍适用性**:VOC2012被普遍应用于学术研究和工业应用,作为衡量各种计算机视觉技术的标准参照之一。 #### 3. 数据集的组成成分 VOC2012数据集主要可以划分为以下几个部分: - **训练部分**:包括约2500张用于模型训练的图像。 - **验证部分**:包括约2500张用于调整模型参数的图像。 - **测试部分**:包括约4952张用于最终评估模型性能的图像。 - **标注文件**:每个图像都配备有一个XML文件,其记录了图像对象的位置信息和类别标签。 #### 4. 数据集的获取途径及使用方法 根据提供的信息,VOC2012训练数据集可以通过以下链接进行获取: - **获取...
已经博主授权,源码转载自 https://pan.quark.cn/s/0b6e0560b339 在信息技术领域,网络设备的配置与管理构成了核心环节,特别是对于企业级网络架构而言。华为作为全球领先的网络设备生产商,其产品被广泛部署于不同规模的网络系统。本篇将重点阐述如何借助ENSPLite(简称ENSP)对华为交换机实施配置与维护,以及设备包数据导入的操作方法。 ENSP的完整名称为Enterprise Network Simulation Platform Lite,这是一款由华为研发的网络仿真工具,它支持用户在虚拟场景下对网络设备,如路由器、交换机等进行模拟与测试。这种功能为学习华为网络技术、执行设备配置以及诊断故障提供了极大的支持。 我们接下来分析“导入设备包”的含义。在ENSP平台上,设备包是指包含特定华为设备型号及软件版本的资料文件,通过导入这些资料文件,用户能够在虚拟环境构建出与真实设备高度相似的仿真模型,从而进行配置操作和实验验证。举例来说,“CE.rar”极有可能是一款华为CE系列交换机的设备包,CE系列是华为推出的面向企业应用的核心交换机,具备优异的性能表现和极高的可靠性,常被应用于数据心及大型企业网络环境。 设备包导入的操作流程如下: 1. **获取设备包**:用户需要从华为的官方网站或相关的技术支持社区获取对应型号的设备包,例如“CE.rar”。 2. **部署ENSP**:保证已安装最新版本的ENSP软件,并启动该程序。初次使用时,可能需要完成一些基础设定,比如设定工作路径等。 3. **执行设备包导入**:在ENSP的操作界面,选择“文件”选项卡,随后点击“导入”功能,定位到已下载的“CE.rar”文件,并依照指引完成导入动作。此步骤...

62,270

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧