自定義控制項的構建(14)

2022-01-11 05:16:22 字數 2373 閱讀 4955

share

在asp.net中與資料打交道接觸最多的可能就是各類資料來源控制項了,這篇在前面的基礎上構建乙個模板化的資料繫結控制項

資料繫結控制項

我們現在建立乙個繼承compositedataboundcontrol的控制項,其可以在中顯示一批資料項

和前面的內容一樣,我們首先實現乙個實現idataitemcontainer的控制項

public

class viewitems : webcontrol, idataitemcontainer

}
public

int dataitemindex

}
public

int displayindex

}
protected

override htmltextwritertag tagkey

}
public viewitems(object dataitem,int index)
}
然後建立包含其為子項的控制項

public

class blockview: compositedataboundcontrol

set
}
protected

override htmltextwritertag tagkey

}
protected

override

int createchildcontrols(system.collections.ienumerable datasource, bool databinding)

databind(false);
return counter;
}
}
這裡的blockview支援格式化資料項的itemtemplate,而且使用該控制項的時候,必須提供itemtemplate

這裡的createchildcontrols()與前面幾篇中的同名函式是不一樣的,這裡重寫的是compositedataboundcontrol的方法

該方法包含2個引數:datasource:表示資料來源中的所有資料項

databinding:表示從資料來源中檢索資料項時是否呼叫了createchildcontrols()

事實上,blockview每次生成其資料項,都會呼叫createchildcontrols(),當其第一次繫結到資料來源中時,引數datasource會在資料來源控制項中取得資料項。

上面的**要注意的是databind(),因為其要在子控制項建立了之後才會被呼叫,若控制項中包含了資料繫結表示式,在必須呼叫databind()

下面演示一下其用法:

稍微控制一下樣式

.block
.block

div

頁面:

<

div>

<

customer:blockview

id="blockview1"

cssclass="block"

runat="server"

datasourceid="sqldatasource1"

>

<

itemtemplet

>

itemtemplet

>

customer:blockview

>

<

asp:sqldatasource

id="sqldatasource1"

runat="server"

connectionstring=""
selectcommand="select [id], [assetcode] from [assetinfo]"

>

asp:sqldatasource

>

div>

這些標籤還是很熟悉的..

看看效果吧:)

本文參考了《asp.net 揭秘 卷2》

自定義控制項的構建 9

share 前面重點介紹了parsechildren特性,當其為false時,控制項的內容會自動的解析成控制項的子控制項,這時控制項內包含的所有內容都會新增到controls集合中,而控制項內任何非伺服器控制項將解析成literal控制項,某些時候可能僅允許一種控制項被新增到controls集合裡。...

自定義控制項的構建 8

share 在前面的幾節基礎上,現在我們開始涉足構建物件集合的控制項,以gridview而言,其內部就包含了多個databoundfield控制項來表示所要顯示的各個列。首先了解名為parsechildren的特性,其用來決定如何解析控制項包含的內容 值為true時,控制項所包含的內容將作為控制項的...

自定義控制項的構建 7

share 在處理回傳事件中,還需要考慮的因素就是事件引數和選項 傳遞歸傳事件引數 前面曾提到getpostbackclienthyperlinkc 可以為其提供乙個可選引數,其在引發回傳時從瀏覽器傳到伺服器,它的值傳遞到伺服器的 raisepostbackevent 中,這裡實現的功能類似於gri...