GridView的Field(BoundField、CheckBoxField…)

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中每顯示行
<<範例>>…
image
<!--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>  

imageimage

<!--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>   

imageimage

<!--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" />

image

<!--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>
image
<!--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" />
image
<!--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>
image
    <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" />