电竞比分网-中国电竞赛事及体育赛事平台

分享

DataList和Repeater里的自定義button控件的使用

 昵稱10525020 2012-10-12
DataList和Repeater里的自定義button控件的使用


列表數(shù)據(jù)和中繼器 自定義按鈕控件的使用

學(xué)習(xí)內(nèi)容:為ItemCommand event創(chuàng)建一個(gè)event handler將服務(wù)器端代碼和點(diǎn)擊button關(guān)聯(lián)起來。

    DataList和Repeater可以在templates里包含很多Buttons, LinkButtons, ImageButtons。這些button被點(diǎn)時(shí)會(huì)引起postback,并激發(fā)ItemCommand事件。為ItemCommand event創(chuàng)建一個(gè)event handler可以將服務(wù)器端代碼和點(diǎn)擊button關(guān)聯(lián)起來。在這個(gè)event handler里首先檢查傳入的CommandName的值來判斷是哪個(gè)button被點(diǎn)了。其它另外的信息可以通過CommandArgument屬性來提供。 //類CommandEventArgs有兩個(gè)公共屬性,CommandName(用來獲取命令的名稱)和CommandArgument(用來獲取命令的參數(shù))。

    任何時(shí)候,當(dāng)DataList或Repeater的template里的Button, LinkButton, ImageButton被點(diǎn)時(shí),會(huì)產(chǎn)生postback,并激發(fā)DataList或Repeater的ItemCommand事件。除了ItemCommand外,如果button的CommandName 設(shè)為(“Delete”, “Edit”, “Cancel”, “Update”, “Select”)其中一個(gè)時(shí),DataList會(huì)激發(fā)另外一個(gè)事件。但I(xiàn)temCommand都是會(huì)被激發(fā)的。

    當(dāng)DataList或Repeater的template里的Button被點(diǎn)時(shí),通常需要獲取哪個(gè)button被點(diǎn)了(一個(gè)控件里可能有多個(gè)button,比如編輯和刪除),還可能需要一些其它的信息(比如那些button被點(diǎn)的item(項(xiàng))的主鍵)。Button, LinkButton, ImageButton提供了兩個(gè)屬性,它們的值可以傳給ItemCommand event handler:

1. CommandName –表示template里每個(gè)button身份的字符串。 
2. CommandArgument – 通常用來保存一些值,比如主鍵。

 

    配置ObjectDataSource
    添加一個(gè)DataList或Repeater,再添加一個(gè)CategoriesDataSource的ObjectDataSource做數(shù)據(jù)源,用CategoriesBLL類的GetCategories()方法配置它。Visual Studio會(huì)根據(jù)數(shù)據(jù)源為DataList創(chuàng)建一個(gè)默認(rèn)的ItemTemplate,而Repeater的templates需要手工定義。

當(dāng)點(diǎn)“Show Products” LinkButton 時(shí)執(zhí)行服務(wù)器端代碼
    將LinkButton的CommandName設(shè)為“ShowProducts”,并將當(dāng)前記錄的主鍵– CategoryID –通過綁定語法綁定到
CommandArgument。(CategoryArgument='<%# Eval("CategoryID") %>'//在每一項(xiàng)中將CategoryID單向賦給CategoryArgument

    當(dāng)button被點(diǎn)時(shí),產(chǎn)生postback并激發(fā)DataList或Repeater的ItemCommand事件。Button的CommandName和CommandArgument值被傳到event handler里。

    為ItemCommand事件創(chuàng)建一個(gè)event handler,注意event handler的第二個(gè)參數(shù)(名字為e)。這個(gè)參數(shù)的類型為RepeaterCommandEventArgs,它有以下4個(gè)屬性:

1. CommandArgument – 被點(diǎn)的 button’的CommandArgument property 的值 
2. CommandName – button’的CommandName property 的值 
3. CommandSource – 被點(diǎn) button 的引用 
4. Item – 包含被點(diǎn)button 的 RepeaterItem的引用; 每條綁定到Repeater的記錄被表明為一個(gè) RepeaterItem 
    由于選擇的category的CategoryID通過CommandArgument傳入,可以在ItemCommand event handler里獲取與之相關(guān)的products。這些products在ItemTemplate(添加過了的)里綁定到一個(gè)BulletedList。剩下的事就是添加BulletedList,在ItemCommand event handler里引用它,然后將選擇的category的products綁定到BulletedList(詳細(xì)介紹見下面MSDN中內(nèi)容)

    注意:DataList的ItemCommand event handler傳入了一個(gè)DataListCommandEventArgs類型的對象,它提供和RepeaterCommandEventArgs 一樣的4個(gè)屬性。
    顯示選擇的Category的 Products
    使用BulletedList?;氐紺ustomButtons.aspx page頁的聲明代碼,在“Show Products” LinkButton后添加一個(gè)BulletedList。ItemCommand event handler里通過e.Item.FindControl("ProductsInCategory")引用這個(gè)控件,并與products綁定。

C#
protected void Categories_ItemCommand(object source, RepeaterCommandEventArgs e)
{
if (e.CommandName == "ShowProducts")
    {
        // Determine the CategoryID
        int categoryID = Convert.ToInt32(e.CommandArgument);
        // Get the associated products from the ProudctsBLL and bind 
        // them to the BulletedList
        BulletedList products =(BulletedList)e.Item.FindControl("ProductsInCategory");
        ProductsBLL productsAPI = new ProductsBLL();
        products.DataSource =productsAPI.GetProductsByCategoryID(categoryID);
        products.DataBind());
    }
}
    在ItemCommand event handler里執(zhí)行任何操作前,需要先檢查傳入的CommandName。由于ItemCommand event handler在任何button被點(diǎn)時(shí)都會(huì)執(zhí)行,如果在template里有多個(gè)button時(shí)需要通過CommandName的值來辨別需要采取什么操作。在前面 DataList里使用button 的教程里,通過DataKeys集合來獲取給定item的主鍵。這個(gè)方法在DataList里很好用,但是Repeater沒有DataKeys屬性。因此需要換一種方法來提供主鍵的值,比如通過button的 CommandArgument,或者在template使用一個(gè)隱藏的Label,然后通過e.Item.FindControl("LabelID")在ItemCommand event handler里讀出它的值。

    注意:如果需要修改這個(gè)報(bào)表的行為,比如一次只列出一個(gè)category的products,僅僅只需要將BulletedList的EnableViewState屬性設(shè)為False。

    來自MSDN中的內(nèi)容:

    BulletedList類:創(chuàng)建一個(gè)控件,該控件生成一個(gè)采用項(xiàng)目符號格式的項(xiàng)列表。 命名空間:System.Web.UI.WebControls
備注
    使用 BulletedList 控件來創(chuàng)建一個(gè)采用項(xiàng)目符號格式的項(xiàng)列表。若要指定希望顯示在 BulletedList 控件中的個(gè)別列表項(xiàng),請?jiān)?BulletedList 控件的開始標(biāo)記和結(jié)束標(biāo)記之間為每個(gè)項(xiàng)放置一個(gè) ListItem 對象。

    若要指定 BulletedList 控件中用于顯示列表項(xiàng)的項(xiàng)目符號類型,請將 BulletStyle 屬性設(shè)置為 BulletStyle 枚舉定義的項(xiàng)目符號類型之一。下表列出了可用的項(xiàng)目符號樣式。

項(xiàng)目符號樣式 
說明 
NotSet 未設(shè)置。 
Numbered 數(shù)字。 
LowerAlpha 小寫字母。 
UpperAlpha 大寫字母。 
LowerRoman 小寫羅馬數(shù)字。 
UpperRoman 大寫羅馬數(shù)字。 
Disc 實(shí)心圓。 
Circle 圓圈。 
Square 實(shí)心正方形。 
CustomImage 自定義圖像。

 

圖:BulletedList樣式

    使用 FirstBulletNumber 屬性來指定排序 BulletedList 控件中開始列表項(xiàng)編號的值。如果 BulletStyle 屬性設(shè)置為 Disc、Square、Circle 或 CustomImage 字段,則忽略分配給 FirstBulletNumber 屬性的值。如果將 BulletStyle 屬性設(shè)置為 CustomImage 的值,以指定項(xiàng)目符號的自定義圖像,則您還必須設(shè)置 BulletImageUrl 屬性以指定圖像文件的位置。

 

    若要指定 BulletedList 中列表項(xiàng)的顯示行為,請將 DisplayMode 屬性設(shè)置為 BulletedListDisplayMode 枚舉定義的值之一。定義的顯示行為是 Text、HyperLink 和 LinkButton。

    單擊超鏈接時(shí),將定位到相應(yīng)的 URL。使用 Value 屬性指定超鏈接定位到的 URL。使用 Target 屬性指定框架或窗口,單擊超鏈接時(shí),將在該框架或窗口顯示定位到的網(wǎng)頁。

    當(dāng) DisplayMode 屬性設(shè)置為 LinkButton 時(shí),BulletedList 控件將列表項(xiàng)顯示為鏈接,單擊這些鏈接將回發(fā)到服務(wù)器。若要以編程方式控制單擊鏈接按鈕時(shí)執(zhí)行的操作,請為 Click 事件提供事件處理程序。請注意,SelectedIndex 和 SelectedItem 屬性是從 ListControl 類繼承而來的,并且不適用于 BulletedList 控件。使用 BulletedListEventArgs 類的事件數(shù)據(jù)來確定單擊的 BulletedList 中的鏈接按鈕的索引。

    BulletedList 控件也支持?jǐn)?shù)據(jù)綁定。若要將 BulletedList 綁定到數(shù)據(jù)源,可以使用提供的任意數(shù)據(jù)綁定機(jī)制。

 

 

    Button.CommandArgument 屬性獲取或設(shè)置可選參數(shù),該參數(shù)與關(guān)聯(lián)的 CommandName一起被傳遞到 Command 事件。命名空間:System.Web.UI.WebControls
備注
    使用 CommandArgument 屬性來指定補(bǔ)充 CommandName 屬性的參數(shù)。
注意 
    盡管可以單獨(dú)設(shè)置 CommandArgument 屬性,但該屬性通常只在也設(shè)置了 CommandName 屬性時(shí)才使用。
    CommandArgument 屬性通過使您可以提供有關(guān)要執(zhí)行的命令的附加信息,對 CommandName 屬性加以補(bǔ)充。例如,如果將 CommandName 屬性設(shè)置為 Sort,并將 CommandArgument 屬性設(shè)置為 Ascending,則指定了按升序進(jìn)行排序的命令。
類CommandEventArgs有兩個(gè)公共屬性,CommandName(用來獲取命令的名稱)和CommandArgument(用來獲取命令的參數(shù))。



    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多