乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      DataGrid/DataList的使用

       馬兒 2005-11-19

      一、方法
      1、DataBind
      很簡(jiǎn)單、最常用的方法。綁定數(shù)據(jù)用。需要注意的只有一點(diǎn):執(zhí)行了這個(gè)方法后,DataGrid(由于DataGrid和DataList極為相似,所以下面的介紹雖然是針對(duì)DataGrid,但與DataList也相差不遠(yuǎn))里面所有的顯示綁定數(shù)據(jù)的控件,都會(huì)顯示DataSource里的數(shù)據(jù),其余控件也將初始化成.aspx里設(shè)計(jì)的狀態(tài)。


      二、屬性
      1、DataSource
      有DataBind的地方,就應(yīng)該有DataSource。如果沒(méi)有指定DataSource而執(zhí)行DataBind,那DataGrid將什么也不會(huì)顯示。
      DataSource一般是DataSet、DataTable或者DataView。當(dāng)然也可以綁定DataReader或者其他實(shí)現(xiàn)IEnumerable的類。

      2、DataKeyField,DataKeys
      當(dāng)你在DataGrid中定位一行之后,肯定想知道這行在數(shù)據(jù)表里的位置,至少有五種方法可以做到這一點(diǎn),設(shè)置DataGrid的DataKeyField就是這幾種方法之一。
      DataKeyField一般設(shè)置為數(shù)據(jù)表的Unique字段(否則就沒(méi)意義了),通過(guò)DataKey可以得到這一行對(duì)應(yīng)的關(guān)鍵字段的值。
      DataKeys是DataKey的集合,通過(guò)行的索引來(lái)讀取相應(yīng)行的DataKey。

      3、EditItemIndex,SelectedIndex,CurrentPageIndex,SelectedItem
      這些屬性都很好理解,看名字就知道是什么意思,需要注意的是,設(shè)置了EditItemIndex或者CurrentPageIndex后需要重新執(zhí)行DataBind方法(當(dāng)然,前面提到過(guò),還需要設(shè)置DataSource)。

      4、Columns
      沒(méi)什么好解釋的,Columns就是Columns,列的集合,可以設(shè)置列的屬性,包括Visible、HeaderText、FooterText、SortExpression等。
      嚴(yán)重注意:自動(dòng)生成的列,是不包含在Columns中的。只有在.aspx中顯示聲明的列和在代碼中添加的列才會(huì)被包含在其中。

      5、Items
      俗話說(shuō),最后的都是最重要的,把Items作為最后一個(gè)屬性來(lái)介紹,正式基于這樣的理由。
      Items是DataGridItem的集合,可以遍歷當(dāng)前DataGrid中顯示數(shù)據(jù)的DataGridItem。
      5.1、DataGridItem
      每一個(gè)DataGridItem就是DataGrid中顯示的一行,其中包括:
      Header   DataGrid 控件的標(biāo)題部分
      Item   DataGrid 控件中的項(xiàng)
      AlternatingItem  DataGrid 控件中的交替項(xiàng)
      SelectedItem    DataGrid 控件中的選定項(xiàng)(由SelectedIndex設(shè)置,通過(guò)SelectedItem屬性或者Items[SelectedIndex]來(lái)讀取)
      EditItem    DataGrid 控件中處于編輯狀態(tài)的項(xiàng)(由EditItemIndex設(shè)置,通過(guò)Items[EditItemIndex]來(lái)讀取)
      Separator    DataGrid 控件中項(xiàng)之間的分隔符
      Footer    DataGrid 控件的腳注部分
      Pager     DataGrid 控件的頁(yè)選擇節(jié)
      注意,DataGrid的Items屬性中不會(huì)包含Header、Footer、Pager這三類DataGridItem的。
      5.1.1、DataGridItem的屬性
      ItemIndex —— 得到行在Items中的索引
      ItemType —— 返回行的類型,也就是上面列出的Header、Item、...、Pager
      Cells —— 返回行包含的所有TableCell(不管是顯示聲明的,還是自動(dòng)生成的,不管是可以看見(jiàn)的,還是隱藏掉的),通過(guò)TableCell,可以讀取Cell中顯示的文本、包含的控件
      嚴(yán)重注意:只有BoundColumn列和自動(dòng)生成列,才可以通過(guò)TableCell.Text屬性讀取顯示的文本。HyperLinkColumn、ButtonColumn、EditCommandColumn都需要將目標(biāo)控件轉(zhuǎn)換成相應(yīng)的控件。
      比如:
      假設(shè)DataGrid的第一列聲明如下
      <asp:HyperLinkColumn DataTextField="au_id" HeaderText="au_id" DataNavigateUrlField="au_id" DataNavigateUrlFormatString="Edit.aspx?id={0}"></asp:HyperLinkColumn>
      讀取的時(shí)候可以用:
      //Items[0]表示第一行,Cells[0]表示第一列,Controls[0]表示Cell中的第一個(gè)控件(也只有這個(gè)控件可以用)
      HyperLink link = (HyperLink)DataGrid1.Items[0].Cells[0].Controls[0]);
      Response.Write(link.Text);
      至于模板列(TemplateColumn),當(dāng)然也可以通過(guò)DataGrid1.Items[i].Cells[j].Controls[n]來(lái)獲取,然后轉(zhuǎn)換成原來(lái)的控件類型再操作,但是還有個(gè)更好的辦法,就是用FindControl來(lái)查找控件。
      FindControl是System.Web.UI.Control的方法,可以根據(jù)子控件ID來(lái)查找子控件
      比如:
      假設(shè)DataGrid的某一列聲明如下
      <asp:TemplateColumn>
         <ItemTemplate>
            <asp:TextBox Runat="server" ID="txtID" Text=‘<%# DataBinder.Eval(Container.DataItem,"au_id") %>‘>
            </asp:TextBox>
         </ItemTemplate>
      </asp:TemplateColumn>
      讀取方法:
      TextBox txt = (TextBox)DataGrid1.Items[1].FindControl("txtID");
      Response.Write(txt.Text);
      注意:DataList中是沒(méi)有Cell的


      三、事件
      1、ItemCommand、CancelCommand、DeleteCommand、EditCommand、UpdateCommand
      也就是DataGrid中,點(diǎn)擊Button、LinkButton后執(zhí)行的事件,執(zhí)行的事件取決于按鈕的CommandName。其實(shí)最主要的一個(gè)是ItemCommand,而后面四個(gè)都只是ItemCommand的一小部分,
      比如一個(gè)按鈕的CommandName為"Cancel",當(dāng)返回后,首先執(zhí)行的是ItemCommand事件,然后才是CancelCommand事件。

      2、PageIndexChanged
      如果你的DataGrid是分頁(yè)的,那當(dāng)你在DataGrid上點(diǎn)擊Pager上的1、2、3或者<、>時(shí),就會(huì)激發(fā)這個(gè)事件。
      在這個(gè)事件里面,你可以用e.NewPageIndex來(lái)讀取要改變的頁(yè),然后賦值給DataGrid的CurrentPageIndex屬性,最后不要忘了,還要設(shè)置DataSource,還要執(zhí)行DataBind。
      注意:DataList中沒(méi)有這個(gè)事件,如果需要在DataList中分頁(yè),可以一段一段的讀取數(shù)據(jù),然后把當(dāng)前段的數(shù)據(jù)綁定到DataList上。

      3、ItemDataBound,ItemCreated
      首先要說(shuō)的是這兩個(gè)事件的發(fā)生時(shí)間。
      ItemDataBound嘛,只要執(zhí)行了DataBind方法,就會(huì)馬上激發(fā)這個(gè)事件。
      ItemCreated呢,如果頁(yè)面是第一次訪問(wèn)(Page.IsPostBack = false),那在第一次執(zhí)行DataBind的時(shí)候,會(huì)先激發(fā)ItemCreated事件,也就是說(shuō),執(zhí)行了DataBind后,首先會(huì)用ItemCreated來(lái)建立Header行,然后用ItemDataBound來(lái)綁定Header行,再用ItemCreated來(lái)建立第一行,再調(diào)用ItemDataBound來(lái)綁定第一行,也就是說(shuō)ItemCreated和ItemDataBound是交替執(zhí)行的。
      頁(yè)面返回時(shí),也會(huì)執(zhí)行ItemCreated事件,在Page_Load之前,但是這時(shí)候就不會(huì)再執(zhí)行ItemDataBound事件了。
      所以,如果你想在DataGrid里動(dòng)態(tài)添加什么控件,就需要在ItemCreated事件中,而不是在ItemDataBound事件中。


      四、代碼片斷
      1、DataGrid顯示雙層表頭
      假設(shè)你的DataGrid有三列,現(xiàn)在想將前兩列作為"大類1",第三列作為"大類2",現(xiàn)在,你可以在ItemDataBound事件中加入下面的代碼:
      if (e.Item.ItemType == ListItemType.Header)
      {
       e.Item.Cells[0].ColumnSpan = 2;
       e.Item.Cells[0].Text = "大類1</td><td>大類2</td></tr><tr><td>" + e.Item.Cells[0].Text;
      }
      用這個(gè)方法可以為任意添加新行。

      2、設(shè)置綁定列或者自動(dòng)生成列的編輯框?qū)挾?BR>請(qǐng)?jiān)谀愕腎temDataBound事件中加入一下代碼:
      if (e.Item.ItemType == ListItemType.EditItem)
      {
       for (int i = 0; i < e.Item.Cells.Count; i++)
       {
        TextBox txt = (TextBox)e.Item.Cells[i].Controls[0];
        txt.Width = Unit.Pixel(50);
       }
      }

      3、處理在DataGrid中的DropDownList的事件
      DropDownList沒(méi)有CommandName屬性,所以不能用ItemCommand事件,不過(guò)你可以這樣試試:
      在DataGrid的模板列中加入的DropDownList控件
      <asp:DropDownList runat="server" id="ddl" AutoPostBack="True" OnSelectedIndexChanged="ddl_SelectedIndexChanged" />
      然后你在.aspx.cs中加入一個(gè)函數(shù)
      protected void ddl_SelectedIndexChanged(object sender, System.EventArgs e) //一定要聲明成protected或者public,不能是private的。
      {
        //在這里就可以加入其他代碼
      }

      3.1、在上面的事件中怎樣得到本行其他Cell的值呢?
      我們知道,DataGrid完全是一個(gè)Table結(jié)構(gòu)的控件,DataGrid包含DataGridItem,每個(gè)DataGridItem又包含TableCell,那么,我們就可以在TableCell的某個(gè)控件中,利用控件的Parent來(lái)得到TableCell,再利用TableCell的Parent,就可以得到DataGridItem了。
      protected void ddl_SelectedIndexChanged(object sender, System.EventArgs e) //一定要聲明成protected或者public,不能是private的。
      {
        DropDownList ddl = (DropDownList)sender;
        TableCell cell = (TableCell)ddl.Parent;
        DataGridItem item = (DataGridItem)cell.Parent;
        Response.Write(item.Cells[0].Text);
      }

      4、怎樣得到Header、Footer、Pager里的控件
      方法一:在ItemCreated或者ItemDataBound中,具體代碼就不在多寫(xiě)了
      方法二:遍歷DataGrid的所有Item(注意,不是遍歷DataGrid1.Items下的Item)
      foreach (DataGridItem item in DataGrid1.Controls[0].Controls)
      {
        if (item.ItemType == ListItemType.Header)
        {
          //用item.FindControl查找相應(yīng)的控件
        }
      }
      大家可能會(huì)注意到,這里有個(gè)DataGrid1.Controls[0].Controls,這表示,DataGrid1下,有一個(gè)子控件,這個(gè)子控件是DataGridTable類型,他下面才是DataGridItem集合
      在DataList中,下面的子控件直接就是DataListItem了,而沒(méi)有Table:
      foreach (DataListItem item in DataList1.Controls)
      {
        //....
      }

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多