代码改变世界

asp.net 动态加载用户自定义控件竟然不执行DataGrid 中的ItemDataBound事件?

  无常  阅读(2124)  评论(2编辑  收藏  举报
自定义控件StudentScoreMoudle.ascx用于显示学生成绩,其代码如下
namespace oa.Teacher.WebClient.modules
{
    
using System;
    
using System.Data;
    
using System.Drawing;
    
using System.Web;
    
using System.Web.UI.WebControls;
    
using System.Web.UI.HtmlControls;


    
/// <summary>
    
///        StudentScoreMoudle 的摘要说明。
    
/// </summary>

    public class StudentScoreMoudle : System.Web.UI.UserControl
    
{
        
protected System.Web.UI.WebControls.DataGrid dgScore;

        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
// 在此处放置用户代码以初始化页面
        }

        
public void bindData( DataView data )
        
{
            dgScore.DataSource 
= data;
            dgScore.DataBind();
        }


        
Web 窗体设计器生成的代码

        
private void dgScore_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        
{
            
if (e.Item.ItemType == ListItemType.Header)
            
{
                e.Item.Cells[
0].ColumnSpan = 6;
                e.Item.Cells[
0].Text = "大类1</td><td>大类2</td></tr><tr><td>" + e.Item.Cells[0].Text;
                Response.Write(
"sdfsd");
                
            }

        }

    }

}


其怪的是:如果用此方法动态加载的话改变不了表头!
            StudentScoreMoudle sc= Page.LoadControl( "../modules/StudentScoreMoudle.ascx" ) as StudentScoreMoudle;
            sc.bindData( data.Tables[ StudentScoreData.学生成绩表名 ].DefaultView );

而在页面设计时先把此控件放到页面上,然后调用
ssm.bindData( data.Tables[ StudentScoreData.学生成绩表名 ].DefaultView );
给控件绑定数据去没这个问题?

为什么呢?
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示