一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

asp.net控件開發(fā)基礎(chǔ)(18)

  本篇繼續(xù)上篇的討論,可能大家已經(jīng)在使用ASP.NET2.0了,DataSource屬性不再使用,而是跟數(shù)據(jù)源控件搭配使用.現(xiàn)在討論的綁定技術(shù)都是基于1.1版本,先熟悉一下,本質(zhì)上是一樣的,這樣一步步的學(xué)習(xí).對(duì)以后絕對(duì)有幫助.因?yàn)楫?dāng)你使用數(shù)據(jù)源控件,只需要設(shè)置一個(gè)DataSourceID,方便的同時(shí)你是否知道數(shù)據(jù)源控件幫你做了什么事情,如果你想覺的夠用了,可以不用了解,但我相信你一定會(huì)有需求。上篇最后說過了,討論還剛剛開始,我們大致把核心的方法都寫出來(lái)了.下面我們繼續(xù)。

  一.控件對(duì)比

  我們可以使用上篇制作的TemplatedList控件跟內(nèi)置控件做一下對(duì)比異同。在2.0未到來(lái)的時(shí)候,我們只有Repeater,DataList,DataGrid,現(xiàn)在我們也根據(jù)這三個(gè)控件進(jìn)行討論,下面把TemplatedList與DataList進(jìn)行對(duì)比

  (1)布局樣式?jīng)]DataList多...

  (2)模板沒DataList多...

  (3)TemplatedList沒ItemCollection

  (4)TemplatedList沒有預(yù)定義Command事件(如EditCommand,UpdateCommand等)

  或者還有更多的,上面的都是次要的,布局上面我們可以改善,我們也可以添加ItemCollection,也可以預(yù)定義Command事件,但發(fā)現(xiàn)TemplatedList跟內(nèi)置的綁定控件有幾個(gè)跟數(shù)據(jù)操作嚴(yán)重的不同點(diǎn)

  (1)DataSource屬性類型不同  IEnumerable和Object

  為什么要將其類型設(shè)置為Object呢?

  IEnumerable支持Array,ArrayList等返回類型,但卻不支持DataSet類型,這是一個(gè)很嚴(yán)重的問題,設(shè)置其類型為Object,可以讓控件支持更廣泛的數(shù)據(jù)源(當(dāng)然也要根據(jù)需求)這個(gè)是本次討論的重點(diǎn)

  (2)DataMember 

  其用于指定數(shù)據(jù)源的特定表,由于DataSet的介入,其可能含有多個(gè)表,所以也就有了這個(gè)屬性,否則的話就不需要他

  (3)DataKeyField鍵字段

  由于預(yù)定義Command事件的介入,實(shí)現(xiàn)對(duì)數(shù)據(jù)的操作,DataKeyField用于幫助數(shù)據(jù)特定記錄的操作

  二.確定目標(biāo)

  根據(jù)上面的對(duì)比,我們已經(jīng)知道接下來(lái)要做什么了,要讓控件DataSouce屬性支持更多的數(shù)據(jù)源(只要還是DataSet)

  本次的demo我們將要模仿Repeater來(lái)制作,為什么不用TemplatedList?因?yàn)檫@樣我們可以對(duì)更多控件的實(shí)現(xiàn)更加的熟悉,這樣在使用內(nèi)置控件的時(shí)候,你將明白的更透徹.此處的demo來(lái)自Building ASP.NET Server Controls書中的例子

  Repeater與TemplatedList的異同

  不同點(diǎn)

  大家都知道Repeater可以靈活的進(jìn)行布局,所以去掉了模板樣式屬性,我們?yōu)槠涮砑恿硕鄠€(gè)模板屬性,Repeater控件沒有預(yù)定義Command事件,所以不需要DataKeyField屬性.還為Repeater定義了TemplatedListmy沒有的ItemCollection集合,當(dāng)然也可以為TemplatedList添加這個(gè)集合最大的不同。Repeater支持DataSet,TemplatedList不支持。

  相同點(diǎn)

  都是數(shù)據(jù)綁定控件,所以里面很多的實(shí)現(xiàn)方法幾乎相同,如果你看過TemplatedList的實(shí)現(xiàn),再看Repeater的代碼,基本沒有難度,Repeater的實(shí)現(xiàn)比TemplatedList還要簡(jiǎn)單。

  好了,下面我們開始吧.

  三.實(shí)現(xiàn)

  1.為數(shù)據(jù)控件做好準(zhǔn)備

  幾乎跟上篇一樣,所以不再介紹

  2.編寫Repeater

  (1)定義成員屬性和事件

private object dataSource;
/// <summary>
/// 綁定的列表的數(shù)據(jù)源
/// </summary>
[Category("Data"), Description("綁定的列表的數(shù)據(jù)源"),
DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
DefaultValue(
null), Bindable(true)]
public object DataSource
{
get
{
return dataSource;
}
set
{
if ((value is IEnumerable) || (value is IListSource) || (value == null))
dataSource
= value;
else
throw new Exception("錯(cuò)誤的數(shù)據(jù)源類型");
}
}

/// <summary>
/// 當(dāng)數(shù)據(jù)綁定到列表數(shù)據(jù)源時(shí)要提取的數(shù)據(jù)成員
/// </summary>
[Category("Data"), Description("當(dāng)數(shù)據(jù)綁定到列表數(shù)據(jù)源時(shí)要提取的數(shù)據(jù)成員")]
public virtual string DataMember
{
get
{
object member = ViewState["DataMember"];
if (member == null)
return string.Empty;
else
return (string)member;
}
set
{
ViewState[
"DataMember"] = value;
}
}

NET技術(shù)asp.net控件開發(fā)基礎(chǔ)(18),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 日本三级韩国三级美三级91 | 亚洲午夜小视频 | 成年午夜视频 | 成人春色在线观看免费网站 | 91精品国产自产在线观看高清 | 亚洲天堂久久精品成人 | 亚洲激情综合网 | 亚洲福利视频网址 | 国产在线播 | 成人性色大片 | 999网站 | 亚洲一区在线观看视频 | 欧美激情网站 | 国产福利在线观看 极品美女 | 97人人草| 五月综合激情网 | 自偷自拍亚洲欧美清纯唯美 | 欧美精品无需播放器在线观看 | 国产国产成人精品久久 | 最近中文字幕完先锋资源 | 91福利视频一区 | 美女被日在线观看 | 国产igao激情在线观看 | 日韩精品免费一区二区三区 | 色哟哟网 | 看美女毛片 | 伊人精品在线视频 | 日本xxxⅹ色视频在线观看网站 | 久久久久久一级毛片免费野外 | 高清一区二区三区免费 | 悠悠色综合| 另类视频色综合 | 91青青操| 色婷婷精品免费视频 | 欧美成人天天综合在线视色 | 国内精品小视频福利网址 | 一区中文字幕 | 美女被日视频 | 日韩亚洲一区二区三区 | 欧洲a老妇女黄大片 | 色婷婷九月 |