GridView的Field(BoundField、CheckBoxField…)
※將GridView控制項AutoGenerateColumns屬性設定為False,
避免資料都以BoundField的方式顯示出來。
BoundField-將資料欄顯示為文字
※三個重要屬性DataField(資料欄位), DataFormatString, HeaderText(標題)
屬性:
ItemStyle 資料欄位樣式
NullDisplayText 資料為Null時,替代的顯示文字
ReadOnly 防止資料欄位進入編輯模式
ShowHeader 是否顯示列標題
Visible 此列是否可見
SortExpression 為資料列指定排序表達式
HtmlEncode 指定在顯示資料之前是否對值,進行HTML編碼,可以防止腳本注入式攻擊。
InsertVisible 指定在插入新一筆資料時,該列是否可見。
CheckBoxField(繼承自BoundField)-將資料欄顯示為勾選框
※除了繼承BoundField的屬性外,Text指定勾選框旁的顯示文字
CommandField-使用連結來支援編輯、刪除或選中行
※自定GridView控制項中的Edit, Delete, Update, Cancel, Select等按鈕的外觀。
使用CommandField時,不需要啟用AutoGenerateEditButon或AutoGenerateDeleteButton,
因為可以直接用CommandField來建立標準的編輯按鈕。
屬性:
ButtonType顯示的按鈕類型,Button, Image, Link
============外觀===================
InsertImageUrl(無法在GridView中使用) 例:InsertImageUrl=”Insert.gif”
InsertText 例:InsertText=”新增”
NewImageUrl(無法在GridView中使用)
NewText
UpdateImageUrl
UpdateText
DeleteImageUrl
DeleteText
EditImageUrl
EditText
CancelImageUrl
CancelText
SelectImageUrl
SelectText
==========是否顯示 true/false=======
ShowCancelButton
ShowDeleteButton
ShowEditButton
ShowInsertButton
ShowSelectButton
==============驗證==================
CausesValidation 是否使用驗證
ValidationGroup 指定和編輯按鈕相關驗證控制項的群組名稱
ButtonField-將資料欄顯示為按鈕(ImageButton, LinkButton, pushButton)
※屬性
ButtonType (Button, Image, Link)
Text按鈕文字
CommandName 指定和ButtonField關聯的標準編輯命令,可以是(Delete, Edit, Update, Cancel)
例CommandName="Delete",表示具有一個刪除功能的按鈕。
DataTextField
DataTextFormatString
=============驗證============
CausesValidation 是否使用驗證
ValidationGroup 指定和編輯按鈕相關驗證控制項的群組名稱
HyperLinkField-將資料欄顯示為超連結
※屬性
DataNavigateUrlFields 於DataNavigateUrlFormatString中使用的列名稱
DataNavigateUrlFormatString
例:DataNavigateUrlFields="Id"
DataNavigateUrlFormatString="Details.aspx?Id={0}"
DataTextField 用來顯示超連結文字的資料欄名
DataTextFormatString
NavigateUrl
Target 目標窗口或框架(_blank, _parent, _self, _top)也可以直接指定框架名稱
Text 超連結文字
ImageField-將資料欄顯示為圖片(只能用來顯示儲存在伺服器端硬碟上的圖片,無法用於資料庫中的圖片)
※屬性
AlternateText 備用的替代文字
DataAlternateTextField 使用指定資料欄值,作為備用替代文字
DataAlternateTextFormatString
DataImageUrlField 存放圖片檔名的資料欄位
DataImageUrlFormatString
例:DataImageUrlField="FileName"
DataImageUrlFormatString="~/Photos/{0}"
NullImageUrl 指定備用圖片,當DataImageUrlField值為null時顯示此圖片
TemplateField-用來自定資料項的外觀
使用TemplateField可以在GridView控制項的資料列中加入任何內容。
例如:HTML,資料綁定表達式, ASP.NET控制項等。
※支援的版型
AlternatingItemTemplate 間隔行<版型>
EditItemTemplate-當前編輯行
FooterTemplate-頁腳
HeaderTemplate-標題
InsertItemTemplate-新增行(不支援GridView)
ItemTemplate-GridView中每顯示行
<<範例>>…
<!--BoundField-->
<asp:GridView
id="grdMovies"
DataSourceID="srcMovies"
AutoGenerateColumns="false"
Runat="server">
<Columns>
<asp:BoundField
DataField="Title"
HeaderText="Movie Title" />
<asp:BoundField
DataField="Director"
HeaderText="Movie Director" />
<asp:BoundField
DataField="BoxOfficeTotals"
DataFormatString="{0:c}"
HeaderText="Box Office Totals" />
</Columns>
</asp:GridView>
<!--CheckBoxField-->
<asp:GridView
id="grdMovies"
DataSourceID="srcMovies"
DataKeyNames="Id"
AutoGenerateColumns="false"
AutoGenerateEditButton="true"
Runat="server">
<Columns>
<asp:BoundField
DataField="Title"
HeaderText="Movie Title" />
<asp:CheckBoxField
DataField="InTheaters"
HeaderText="In Theaters" />
</Columns>
</asp:GridView>
<!--CommandField-->
<asp:GridView
id="grdMovies"
DataSourceID="srcMovies"
DataKeyNames="Id"
AutoGenerateColumns="false"
Runat="server">
<Columns>
<asp:CommandField
ButtonType="Image"
ShowEditButton="true"
EditText="Edit Movie"
EditImageUrl="Edit.gif"
UpdateText="Update Movie"
UpdateImageUrl="Update.gif"
ShowCancelButton="true"
CancelText="Cancel Edit"
CancelImageUrl="Cancel.gif"
ShowDeleteButton="true"
DeleteText="Delete Movie"
DeleteImageUrl="Delete.gif" />
<asp:BoundField
DataField="Title"
HeaderText="Movie Title" />
<asp:BoundField
DataField="Director"
HeaderText="Movie Director" />
</Columns>
</asp:GridView>
<asp:SqlDataSource
id="srcMovies"
ConnectionString="<%$ ConnectionStrings:Movies %>"
SelectCommand="SELECT Id,Title,Director FROM Movies"
UpdateCommand="UPDATE Movies SET
Title=@Title, Director=@Director
WHERE Id=@Id"
DeleteCommand="DELETE Movies
WHERE Id=@Id"
Runat="server" />
<!--ButtonField-->
<asp:GridView
id="grdMovieCategories"
DataSourceID="srcMovieCategories"
DataKeyNames="Id,Position"
AutoGenerateColumns="false"
OnRowCommand="grdMovieCategories_RowCommand"
Runat="server">
<Columns>
<asp:ButtonField
Text="Move Up"
CommandName="Up" />
<asp:ButtonField
Text="Move Down"
CommandName="Down" />
<asp:BoundField
DataField="Position"
HeaderText="Position" />
<asp:BoundField
DataField="Name"
HeaderText="Category Name" />
</Columns>
</asp:GridView>
<asp:SqlDataSource
id="srcMovieCategories"
ConnectionString="<%$ ConnectionStrings:Movies %>"
SelectCommand="SELECT Id, Name, Position FROM MovieCategories
ORDER BY Position"
UpdateCommand="UPDATE MovieCategories SET
Position=@Position WHERE Id=@Id"
Runat="server">
<UpdateParameters>
<asp:Parameter
Name="Id" />
<asp:Parameter
Name="Position" />
</UpdateParameters>
</asp:SqlDataSource>
<script runat="server">
protected void grdMovieCategories_RowCommand(object sender, GridViewCommandEventArgs e)
{
int index = Int32.Parse((string)e.CommandArgument);
int id = (int)grdMovieCategories.DataKeys[index].Values["Id"];
int position = (int)grdMovieCategories.DataKeys[index].Values["Position"];
switch (e.CommandName)
{
case "Up":
position--;
break;
case "Down":
position++;
break;
}
srcMovieCategories.UpdateParameters["Id"].DefaultValue = id.ToString();
srcMovieCategories.UpdateParameters["Position"].DefaultValue = position.ToString();
srcMovieCategories.Update();
}
</script>
<!--HyperLinkField-->
<asp:GridView
id="grdMovieCategories"
DataSourceID="srcMovieCategories"
AutoGenerateColumns="false"
Runat="server">
<Columns>
<asp:HyperLinkField
HeaderText="Movie Categories"
DataTextField="Name"
DataNavigateUrlFields="Id"
DataNavigateUrlFormatString="Details.aspx?id={0}"
Target="detailFrame"/>
</Columns>
</asp:GridView>
<iframe id="myFrame" name="detailFrame"/>
<asp:SqlDataSource
id="srcMovieCategories"
ConnectionString="<%$ ConnectionStrings:Movies %>"
SelectCommand="SELECT Id, Name FROM MovieCategories"
Runat="server" />
<!--ImageField-->
<asp:GridView
id="grdImages"
DataSourceID="srcImages"
AutoGenerateColumns="false"
ShowHeader="false"
Runat="server">
<Columns>
<asp:BoundField DataField="AltText" HeaderText="說明"/>
<asp:ImageField
DataImageUrlField="FileName"
DataImageUrlFormatString="~/Photos/{0}"
DataAlternateTextField="AltText"
ControlStyle-Width="200px" />
</Columns>
</asp:GridView>
<asp:GridView
id="grdMovies"
DataSourceID="srcMovies"
DataKeyNames="Id"
AutoGenerateColumns="false"
AutoGenerateEditButton="true"
Runat="server">
<Columns>
<asp:TemplateField HeaderText="Title">
<ItemTemplate>
<%# Eval("Title") %>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox
id="txtTitle"
Text='<%# Bind("Title") %>'
Runat="server" />
<asp:RequiredFieldValidator
id="valTitle"
ControlToValidate="txtTitle"
Text="(required)"
Runat="server" />
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Category">
<ItemTemplate>
<%# Eval("Name") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList
id="ddlCategory"
DataSourceID="srcMovieCategories"
DataTextField="Name"
DataValueField="Id"
SelectedValue='<%# Bind("CategoryId") %>'
Runat="server" />
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:SqlDataSource
id="srcMovies"
ConnectionString='<%$ ConnectionStrings:Movies %>'
SelectCommand="SELECT Movies.Id, Title, CategoryId, Name
FROM Movies JOIN MovieCategories
ON MovieCategories.Id = Movies.CategoryId"
UpdateCommand="UPDATE Movies SET Title=@Title, CategoryId=@CategoryId
WHERE Id=@Id"
Runat="server" />
<asp:SqlDataSource
id="srcMovieCategories"
ConnectionString='<%$ ConnectionStrings:Movies %>'
SelectCommand="SELECT Id, Name FROM MovieCategories"
Runat="server" />