日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Asp.Net服务器控件开发的Grid实现(二)Html标记渲染

發布時間:2024/4/15 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Asp.Net服务器控件开发的Grid实现(二)Html标记渲染 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們先來實現Grid類,代碼如下:

Grid.cs

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.UI;namespace AspNetServerControl {[Designer("AspNetServerControl.Design.GridDesigner, AspNetServerControl.Design")]//設計時支持,需要另外寫一個對就的類[ToolboxData("<{0}:Grid Title=\"Grid\" runat=\"server\"><Columns></Columns></{0}:Grid>")][ToolboxBitmap(typeof(Grid), "toolbox.Grid.bmp")][Description("表格控件")][ParseChildren(true)][PersistChildren(false)][ControlBuilder(typeof(NotAllowWhitespaceLiteralsBuilder))]public class Grid : ControlBase{#region 屬性#region DataSourceprivate object _dataSource;public object DataSource{get { return _dataSource; }set { _dataSource = value; }}#endregion#region Columnsprivate GridColumnCollection _columns;/// <summary>/// 列數據/// </summary>[Category(CategoryName.OPTIONS)][NotifyParentProperty(true)][PersistenceMode(PersistenceMode.InnerProperty)][Editor(typeof(GridColumnsEditor), typeof(System.Drawing.Design.UITypeEditor))]//用于編輯器public virtual GridColumnCollection Columns{get{if (_columns == null){_columns = new GridColumnCollection(this);}return _columns;}}#endregion#endregionprotected override void Render(HtmlTextWriter writer){base.Render(writer);if (_columns == null){return;}writer.Write("<table border=\"1\" cellspacing=\"0\">");RenderHeader(writer);RenderBody(writer);writer.Write("</table>");}private void RenderHeader(HtmlTextWriter writer){writer.Write("<tr>");foreach (GridColumn column in Columns){writer.Write(String.Format("<th >{0}</th>", column.HeaderText));}writer.Write("</tr>");}private void RenderBody(HtmlTextWriter writer){DataTable dt = DataSource as DataTable;if (dt == null || dt.Rows.Count <= 0){return;}writer.Write("<tbody>");foreach (DataRow row in dt.Rows){writer.Write("<tr >");foreach (GridColumn column in Columns){writer.Write(String.Format("<td >{0}</td>", row[column.DataField]));}writer.Write("</tr>");}writer.Write("</tbody>");}} } 1.Grid類前面的幾個屬性相當重要:

? ?(1).Designer是設計時支持,需要另外寫一個類庫來支持。

? ?(2).ParseChildren指示頁分析器應如何處理頁上聲明的服務器控件標記中嵌套的內容,也就是這個屬性決定了Grid內部還可以再嵌套其他內容(為true時才可嵌套),比如Columns。

2.繼承自ControlBase,該類后面會介紹。

3.DataSource屬性是數據源。

4.Columns是Grid的內部列,其中[Editor(typeof(GridColumnsEditor), typeof(System.Drawing.Design.UITypeEditor))]這個特性非常重要,該特性指示了該屬性Columns可以在編輯中編輯。其中GridColumnsEditor是界面編輯的類,后面會介紹。

5.重載Render方法。該方法是將Grid最終html形式輸出。這里以table的形式來實現Grid。

(1)將Columns中的所有列的列名以table中的th呈現

(2)將數據源轉換成DataTable,然后遍歷每一行,并將每一行的數據以td的形式呈現。

下面來看一下ControlBase類。

ControlBase.cs

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.UI;namespace AspNetServerControl {public class ControlBase : Control, INamingContainer{} } ControlBase類繼承自Control類及INamingContainer接口,這是自定義控件所必須的。

再來看一下NotAllowWhitespaceLiteralsBuilder類

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.UI;namespace AspNetServerControl {/// <summary>/// 控件內部不允許存在非標簽形式的字符串/// </summary>internal class NotAllowWhitespaceLiteralsBuilder : ControlBuilder{/// <summary>/// 不允許空白字符/// </summary>/// <returns></returns>public override bool AllowWhitespaceLiterals(){return false;}/// <summary>/// 忽略游離于標簽外的字符串/// </summary>/// <param name="s"></param>public override void AppendLiteralString(string s){}public override Type GetChildControlType(string tagName, System.Collections.IDictionary attribs){return base.GetChildControlType(tagName, attribs);}} } NotAllowWhitespaceLiteralsBuilder主要是用來控制控件內部不允許存在非標簽形式的字符串。

后面將會說明GridColumnsEditor及GridColumn字段的定義,具體請看《Asp.Net服務器控件開發的Grid實現(二)》



轉載于:https://www.cnblogs.com/sparkleDai/p/7604984.html

總結

以上是生活随笔為你收集整理的Asp.Net服务器控件开发的Grid实现(二)Html标记渲染的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。