自定义控件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 窗体设计器生成的代码#region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /**//// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器 /// 修改此方法的内容。 /// </summary> private void InitializeComponent() { this.dgScore.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgScore_ItemDataBound); this.Load += new System.EventHandler(this.Page_Load); } #endregion 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 ); 给控件绑定数据去没这个问题? 为什么呢?