asp.net 动态加载用户自定义控件竟然不执行DataGrid 中的ItemDataBound事件?
2004-08-18 16:58 无常 阅读(2128) 评论(2) 收藏 举报
自定义控件StudentScoreMoudle.ascx用于显示学生成绩,其代码如下
 namespace oa.Teacher.WebClient.modules
namespace oa.Teacher.WebClient.modules
 {
{
 using System;
    using System;
 using System.Data;
    using System.Data;
 using System.Drawing;
    using System.Drawing;
 using System.Web;
    using System.Web;
 using System.Web.UI.WebControls;
    using System.Web.UI.WebControls;
 using System.Web.UI.HtmlControls;
    using System.Web.UI.HtmlControls;


 /// <summary>
    /// <summary>
 ///        StudentScoreMoudle 的摘要说明。
    ///        StudentScoreMoudle 的摘要说明。
 /// </summary>
    /// </summary>
 public class StudentScoreMoudle : System.Web.UI.UserControl
    public class StudentScoreMoudle : System.Web.UI.UserControl
 {
    {
 protected System.Web.UI.WebControls.DataGrid dgScore;
        protected System.Web.UI.WebControls.DataGrid dgScore;

 private void Page_Load(object sender, System.EventArgs e)
        private void Page_Load(object sender, System.EventArgs e)
 {
        {
 // 在此处放置用户代码以初始化页面
            // 在此处放置用户代码以初始化页面
 }
        }
 public void bindData( DataView data )
        public void bindData( DataView data )
 {
        {
 dgScore.DataSource = data;
            dgScore.DataSource = data;
 dgScore.DataBind();
            dgScore.DataBind();
 }
        }

 Web 窗体设计器生成的代码
        Web 窗体设计器生成的代码

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

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

而在页面设计时先把此控件放到页面上,然后调用
ssm.bindData( data.Tables[ StudentScoreData.学生成绩表名 ].DefaultView );
给控件绑定数据去没这个问题?
为什么呢?
 namespace oa.Teacher.WebClient.modules
namespace oa.Teacher.WebClient.modules {
{ using System;
    using System; using System.Data;
    using System.Data; using System.Drawing;
    using System.Drawing; using System.Web;
    using System.Web; using System.Web.UI.WebControls;
    using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;
    using System.Web.UI.HtmlControls;

 /// <summary>
    /// <summary> ///        StudentScoreMoudle 的摘要说明。
    ///        StudentScoreMoudle 的摘要说明。 /// </summary>
    /// </summary> public class StudentScoreMoudle : System.Web.UI.UserControl
    public class StudentScoreMoudle : System.Web.UI.UserControl {
    { protected System.Web.UI.WebControls.DataGrid dgScore;
        protected System.Web.UI.WebControls.DataGrid dgScore;
 private void Page_Load(object sender, System.EventArgs e)
        private void Page_Load(object sender, System.EventArgs e) {
        { // 在此处放置用户代码以初始化页面
            // 在此处放置用户代码以初始化页面 }
        } public void bindData( DataView data )
        public void bindData( DataView data ) {
        { dgScore.DataSource = data;
            dgScore.DataSource = data; dgScore.DataBind();
            dgScore.DataBind(); }
        }
 Web 窗体设计器生成的代码
        Web 窗体设计器生成的代码
 private void dgScore_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        private void dgScore_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) {
        { if (e.Item.ItemType == ListItemType.Header)
            if (e.Item.ItemType == ListItemType.Header) {
            { e.Item.Cells[0].ColumnSpan = 6;
                e.Item.Cells[0].ColumnSpan = 6; e.Item.Cells[0].Text = "大类1</td><td>大类2</td></tr><tr><td>" + e.Item.Cells[0].Text;
                e.Item.Cells[0].Text = "大类1</td><td>大类2</td></tr><tr><td>" + e.Item.Cells[0].Text; Response.Write("sdfsd");
                Response.Write("sdfsd"); 
                 }
            } }
        } }
    } }
}
其怪的是:如果用此方法动态加载的话改变不了表头!
 StudentScoreMoudle sc= Page.LoadControl( "../modules/StudentScoreMoudle.ascx" ) as StudentScoreMoudle;
            StudentScoreMoudle sc= Page.LoadControl( "../modules/StudentScoreMoudle.ascx" ) as StudentScoreMoudle; sc.bindData( data.Tables[ StudentScoreData.学生成绩表名 ].DefaultView );
            sc.bindData( data.Tables[ StudentScoreData.学生成绩表名 ].DefaultView );
而在页面设计时先把此控件放到页面上,然后调用
ssm.bindData( data.Tables[ StudentScoreData.学生成绩表名 ].DefaultView );
给控件绑定数据去没这个问题?
为什么呢?


 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号