1. 程式人生 > >DataGrid/DataList控制元件詳解

DataGrid/DataList控制元件詳解

5、Items
俗話說,最後的都是最重要的,把Items作為最後一個屬性來介紹,正式基於這樣的理由。
Items是DataGridItem的集合,可以遍歷當前DataGrid中顯示資料的DataGridItem。
5.1、DataGridItem
每一個DataGridItem就是DataGrid中顯示的一行,其中包括:
Header    DataGrid 控制元件的標題部分
Item    DataGrid 控制元件中的項
AlternatingItem   DataGrid 控制元件中的交替項
SelectedItem    DataGrid 控制元件中的選定項(由SelectedIndex設定,通過SelectedItem屬性或者Items[SelectedIndex]來讀取)
EditItem    DataGrid 控制元件中處於編輯狀態的項(由EditItemIndex設定,通過Items[EditItemIndex]來讀取)
Separator    DataGrid 控制元件中項之間的分隔符
Footer    DataGrid 控制元件的腳註部分
Pager     DataGrid 控制元件的頁選擇節
注意,DataGrid的Items屬性中不會包含Header、Footer、Pager這三類DataGridItem的。
5.1.1、DataGridItem的屬性
ItemIndex —— 得到行在Items中的索引
ItemType —— 返回行的型別,也就是上面列出的Header、Item、...、Pager
Cells —— 返回行包含的所有TableCell(不管是顯示宣告的,還是自動生成的,不管是可以看見的,還是隱藏掉的),通過TableCell,可以讀取Cell中顯示的文字、包含的控制元件
嚴重注意:只有BoundColumn列和自動生成列,才可以通過TableCell.Text屬性讀取顯示的文字。HyperLinkColumn、ButtonColumn、EditCommandColumn都需要將目標控制元件轉換成相應的控制元件。
比如:
假設DataGrid的第一列宣告如下
<asp:HyperLinkColumn DataTextField="au_id" HeaderText="au_id" DataNavigateUrlField="au_id" DataNavigateUrlFormatString="Edit.aspx?id={0}"></asp:HyperLinkColumn>
讀取的時候可以用:
//Items[0]表示第一行,Cells[0]表示第一列,Controls[0]表示Cell中的第一個控制元件(也只有這個控制元件可以用)
HyperLink link = (HyperLink)DataGrid1.Items[0].Cells[0].Controls[0]);
Response.Write(link.Text);
至於模板列(TemplateColumn),當然也可以通過DataGrid1.Items[i].Cells[j].Controls[n]來獲取,然後轉換成原來的控制元件型別再操作,但是還有個更好的辦法,就是用FindControl來查詢控制元件。
FindControl是System.Web.UI.Control的方法,可以根據子控制元件ID來查詢子控制元件
比如:
假設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中是沒有Cell的