问题剖析:
以上为例,每门课程属于不同的类别,需要将显示数据的第一项类别进行汇总显示.用标准的DataGrid是难于实现上述功能的.显然需要依靠自身来解决.
思路:
归根到底,不论何种样式的表格显示,表现到前台都是Html的Table元素,因此如果能够在读取数据时动态确定Html样式,并通过Div将html生成到前台显示的话,就可以控制复杂的显示.这里面其实包含了从已有显示的html反推到动态html生成的过程.
源代码及注释:
定义类保存类别名字和数据条数
public class KeyVal { private string m_Skey; private string m_SVal; public string strKey { get { return m_Skey; } set { m_Skey=value; } } public string strVal { get { return m_SVal; } set { m_SVal=value; } } public KeyVal() {} public KeyVal(string SKey,string SVal) { strKey=SKey; strVal=SVal; } }
测试页代码和相关函数
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls; using System.Security.Principal; using Microsoft.Web.UI.WebControls; using System.Text;
namespace EisWebSite.WebInternet { /// /// ClassCourse 的摘要说明。 /// public class ClassCourse : System.Web.UI.Page { protected System.Web.UI.WebControls.DropDownList SpecialtyID; protected System.Web.UI.HtmlControls.HtmlGenericControl MainDiv; // #region 页面初始化 private void Page_Load(object sender, System.EventArgs e) { if (!Page.IsPostBack) { AppGlobal.CBoxFillSpecialtyData(ref this.SpecialtyID,true); } }
#endregion
#region Web 窗体设计器生成的代码 override protected void OnInit(EventArgs e) { // // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 // InitializeComponent(); base.OnInit(e); } /// /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// private void InitializeComponent() { this.SpecialtyID.SelectedIndexChanged += new System.EventHandler(this.SpecialtyID_SelectedIndexChanged); this.Load += new System.EventHandler(this.Page_Load);
} #endregion
private string CreateOutHtml() {
//取出类型数目以及名称 DataSet dSet=new DataSet(); dSet=添加自己的获取数据集的函数(灵活设计Sql语句)结果为类型、数目
//AppGlobal.AppSysWebService.ClassCourseTeacherMainFilters(Item);
ArrayList mList=new ArrayList(); foreach(DataRow dRow in dSet.Tables[0].Rows) { KeyVal mObj=new KeyVal(); mObj.strKey=dRow[0].ToString(); mObj.strVal=dRow[1].ToString(); mList.Add(mObj); } StringBuilder OutHtml=new StringBuilder(); dSet=添加自己的数据集函数.注意数据的排序方式与上同
//AppGlobal.AppSysWebService.ClassCourseTeacherFilters(Item); //添加固定表头 OutHtml.Append(" +"id='GRid'"+ " style='word-break:break-all; BORDER-RIGHT:black 1px solid; BORDER-TOP:black 1px solid; BORDER-LEFT:black 1px solid; WIDTH:100%; BORDER-BOTTOM:black 1px solid; BORDER-COLLAPSE:collapse'>" ); OutHtml.Append("