一.回顧  如 " /> 亚洲日产2020乱码草莓毕,国产69精品久久久久麻豆,久久国产免费观看精品1

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

asp.net控件開發基礎(17)

  本篇將開始介紹如自定義數據綁定控件,這里感謝很多人的支持,有你們的支持很高興。這里首先需要大家熟悉ASP.NET模板控件的使用,還有自定義模板控件.因為數據綁定控件多是基于模板控件的.

  一.回顧

  如果你使用過ASP.NET內置的數據控件(如DataList,Repeater),你一定會這么做

  1.設置數據源 DataSource屬性

  2.調用數據綁定  DataBind方法

  3.在控件的不同模板內使用綁定語法顯示數據

  這三步應該是必須要做的

  其他更多的

  你可能需要對綁定的數據進行統一的一些操作(如時間格式化),或者對數據的某一項進行操作(對某一項進行格式化),或者需要觸發模板控件內的一些事件(如databound事件)。

  根據上面的一些需求,我們需要這樣做

  1.對綁定的數據進行統一的一些操作: 為數據綁定控件定義Item項(表示列表的一條數據, 如Repeater的RepeaterItem)

  2.對數據的某一項進行操作: 因為定義了Item項,那你肯定需要一個ItemCollection集合,其可以方便的為你檢索數據

  3.因為定義了RepeaterItem,原先的EventArgs和CommandEventArgs已經無法滿足需求,我們需要自定義委托及其一個為控件提供數據的的ItemEventArgs

  上面三點有些并非必須定義,如第2點,還需要根據具體需求來定.但一個完成的控件是需要的。

  二.為數據控件做好準備

  這次的demo為不完整的Datalist控件,來源還是MSDN的例子,我們命名為TemplatedList,此控件未定義ItemCollection集合,好了,根據上面的分析我們先為TemplatedList提供項和委托及為事件提供數據的幾個EventArgs,請看下面類圖

  1.TemplatedListCommandEventArgs為Command事件提供數據

  2.TemplatedListItemEventArgs為一般項提供數據

  3.TemplatedListItem表示TemplatedList的項

  三.編寫TemplatedList

  1.TemplatedList主要功能簡介

  提供一個ItemTemplate模板屬性,提供三種不同項樣式,ItemCommand 事件冒泡事件及4個事件

  2.實現主要步驟

  以下為必須

  (1)控件必須實現 System.Web.UI.INamingContainer 接口

  (2)定義至少一個模板屬性

  (3)定義DataSource數據源屬性

  (4)定義控件項DataItem,即模板的一個容器

  (5)重寫DataBind 方法及復合控件相關方法(模板控件為特殊的復合控件)

  當然還有其他額外的屬性,樣式,事件

  3.具體實現

  下面我們來具體看實現方法

  (1)定義控件成員屬性

#region 靜態變量

private static readonly object EventSelectedIndexChanged = new object();
private static readonly object EventItemCreated = new object();
private static readonly object EventItemDataBound = new object();
private static readonly object EventItemCommand = new object();
#endregion

#region 成員變量
private IEnumerable dataSource;
private TableItemStyle itemStyle;
private TableItemStyle alternatingItemStyle;
private TableItemStyle selectedItemStyle;
private ITemplate itemTemplate;
#endregion

#region 控件屬性

[
Category(
"Style"),
Description(
"交替項樣式"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
NotifyParentProperty(
true),
PersistenceMode(PersistenceMode.InnerProperty),
]
public virtual TableItemStyle AlternatingItemStyle
{
get
{
if (alternatingItemStyle == null)
{
alternatingItemStyle
= new TableItemStyle();
if (IsTrackingViewState)
((IStateManager)alternatingItemStyle).TrackViewState();
}
return alternatingItemStyle;
}
}


[
Category(
"Style"),
Description(
"一般項樣式"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
NotifyParentProperty(
true),
PersistenceMode(PersistenceMode.InnerProperty),
]
public virtual TableItemStyle ItemStyle
{
get
{
if (itemStyle == null)
{
itemStyle
= new TableItemStyle();
if (IsTrackingViewState)
((IStateManager)itemStyle).TrackViewState();
}
return itemStyle;
}
}

[
Category(
"Style"),
Description(
"選中項樣式"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
NotifyParentProperty(
true),
PersistenceMode(PersistenceMode.InnerProperty),
]
public virtual TableItemStyle SelectedItemStyle
{
get
{
if (selectedItemStyle == null)
{
selectedItemStyle
= new TableItemStyle();
if (IsTrackingViewState)
((IStateManager)selectedItemStyle).TrackViewState();
}
return selectedItemStyle;
}
}



[
Bindable(
true),
Category(
"Appearance"),
DefaultValue(
-1),
Description(
"The cell padding of the rendered table.")
]
public virtual int CellPadding
{
get
{
if (ControlStyleCreated == false)
{
return -1;
}
return ((TableStyle)ControlStyle).CellPadding;
}
set
{
((TableStyle)ControlStyle).CellPadding
= value;
}
}

[
Bindable(
true),
Category(
"Appearance"),
DefaultValue(
0),
Description(
"The cell spacing of the rendered table.")
]
public virtual int CellSpacing
{
get
{
if (ControlStyleCreated == false)
{
return 0;
}
return ((TableStyle)ControlStyle).CellSpacing;
}
set
{
((TableStyle)ControlStyle).CellSpacing
= value;
}
}



[
Bindable(
true),
Category(
"Appearance"),
DefaultValue(GridLines.None),
Description(
"The grid lines to be shown in the rendered table.")
]
public virtual GridLines GridLines
{
get
{
if (ControlStyleCreated == false)
{
return GridLines.None;
}
return ((TableStyle)ControlStyle).GridLines;
}
set
{
((TableStyle)ControlStyle).GridLines
= value;
}
}

[
Bindable(
true),
Category(
"Data"),
DefaultValue(
null),
Description(
"數據源"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)
]
public IEnumerable DataSource
{
get
{
return dataSource;
}
set
{
dataSource
= value;
}
}


[
Browsable(
false),
DefaultValue(
null),
Description(
"項模板"),
PersistenceMode(PersistenceMode.InnerProperty),
TemplateContainer(
typeof(TemplatedListItem))
]
public virtual ITemplate ItemTemplate
{
get
{
return itemTemplate;
}
set
{
itemTemplate
= value;
}
}


[
Bindable(
true),
DefaultValue(
-1),
Description(
"選中項索引,默認為-1")
]
public virtual int SelectedIndex
{
get
{
object o = ViewState["SelectedIndex"];
if (o != null)
return (int)o;
return -1;
}
set
{
if (value < -1)
{
throw new ArgumentOutOfRangeException();
}
//獲取上次選中項
int oldSelectedIndex = SelectedIndex;
ViewState[
"SelectedIndex"] = value;

if (HasControls())
{
Table table
= (Table)Controls[0];
TemplatedListItem item;

//第一次選中項不執行
if ((oldSelectedIndex != -1) && (table.Rows.Count > oldSelectedIndex))
{
item
= (TemplatedListItem)table.Rows[oldSelectedIndex];
//判斷項類型,為了將選中項還原為數據項
if (item.ItemType != ListItemType.EditItem)
{
ListItemType itemType
= ListItemType.Item;
if (oldSelectedIndex % 2 != 0)
itemType
= ListItemType.AlternatingItem;
item.SetItemType(itemType);
}
}
//第一次執行此項,并一直執行
if ((value != -1) && (table.Rows.Count > value))
{
item
= (TemplatedListItem)table.Rows[value];
item.SetItemType(ListItemType.SelectedItem);
}
}
}
}


#endregion

NET技術asp.net控件開發基礎(17),轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 手机看片国产免费 | 伦理片92伦理午夜 | 披黑人猛躁10次高潮 | 欧美含羞草免费观看全部完 | 九九热这里只有精品2 | 国产成人啪精品视频免费网 | 国产精品第九页 | 最新国产麻豆精品 | 免费可以看污动画软件 | 亚洲伊人久久精品 | 泡妞高手在都市免费观看 | 99久久国内精品成人免费 | 好男人的视频在线观看 | 久久九九精品国产自在现线拍 | 大香伊人久久 | 俄罗斯6一12呦女精品 | 99久久99久久精品国产片果冻 | 亚洲国产女人aaa毛片在线 | 首页_亚洲AV色老汉影院 | 性欧美xxxxporn| 97视频免费在线观看 | 草草久久久无码国产专区全集观看 | 99久久免费视频6 | 动漫美女禁区图 | 永久免费精品精品永久-夜色 | 在线超碰免费视频观看 | 国产在线精品视频免费观看 | 国产成人免费在线 | 麻豆蜜桃国语精品无码视频 | 亚洲视频区 | 99精品欧美一区二区三区美图 | 饥渴的40岁熟妇完整版在线 | 青青热久精品国产亚洲AV无码 | A级韩国乱理伦片在线观看 a级成人免费毛片完整版 | 免费看男人J放进女人J无遮掩 | 国产精品成久久久久三级四虎 | 入室强伦女教师被学生 | 这里只有精品在线视频 | 色橹橹欧美在线观看视频高 | 亚洲成人一区二区 | 亚洲成色WWW久久网站夜月 |