如果你用過GridView控件后,我相信你會很快喜歡使用它。GridView控件是老版本DataGrid的新一代改良者。是基於DataGrid改良而來的,它不但具備了更強大的數據網格顯示與統計等功能,而且還可以以更少或者零程序代碼來完成簡單的數據處理,如選擇、排序、分頁、編輯與數據統計等。此外,它還可以方便的通過模板來擴展,從而滿足你的各種顯示需求。在日常Web設計中,GridView控件是使用最為頻繁的控件之一。尤其是數據處理方面。
GridView基礎
GridView是一個用於顯示數據的極為靈活的網絡控件。在實際編程中,可以通過多種方式來對GridView控件進行數據綁定,還可以根據程序需要來自定義它的列的類型
數據綁定
- 可以和其他數據綁定控件一樣通過SqlDataSource來進行綁定到DataSoureId
- 可以通過DataSource屬性設置數據源並通過DataBind()方法進行綁定
做法請參考之前內容
定義列
和DetailsView定義列的方式很類似,可以通過AutoGenerateColumns屬性讓它自動顯示數據源中的所有內容。通過將其設置為false,然后定義自己的列字段集合,也可以手動控制哪些列字段將顯示在GridView控件中。不同的列字段類型決定控件中各列的行為。
<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="編號" />
<asp:BoundField DataField="Title" HeaderText="標題" />
<asp:BoundField DataField="Author" HeaderText="作者" />
<asp:BoundField DataField="PublishDate" HeaderText="時間" />
<asp:BoundField DataField="CategoryId" HeaderText="類型" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" SelectCommand="Select * from books" ConnectionString="<%$ ConnectionStrings:con %>"></asp:SqlDataSource>
效果:
另外除了可以為BoundField列設置DataField和HeaderText屬性之外,還可以設置其他的屬性
AccessibleHeaderText | 設置某些控件中呈現為AbbreviatedText的屬性文本 |
ApplyFormateInEditMode | 設置一個布爾值,指示包含BoundField對象的數據綁定控件處於編輯模式時,DataFormateString指定的格式化字符串是否應用到該字段 |
ControlStyle | 設置DataControlField對象所包含的任何Web服務器控件的樣式。 |
ConvertEmptyStringToNull | 設置一個布爾值,指示在數據源中更新數據字段時是否將空字符串自動轉換為null |
DataField | 設置要綁定到BoundField對象的數據字段名稱 |
DataFieldString | 設置字符串,該字符串指定字段值的顯示格式 |
FooterStyle | 設置腳注的樣式 |
FooterText | 設置腳注中顯示的文字 |
HeaderImageUrl | 設置標題中顯示圖片的url |
HeaderStyle | 設置標題樣式 |
HeaderText | 設置標題的文本 |
HtmlEncode | 設置一個布爾值,指示在BoundField對象中顯示字段值之前,是否對這些字段進行Html編碼 |
InsertVisible | |
ItemStyle | 設置當字段顯示任何基於文本的樣式 |
NullDisplayText | 設置當字段值為空時為字段顯示的內容 |
ReadOnly | 設置是否只讀 |
ShowHeader | 設置是否顯示標題 |
SortExpression | 設置數據源控件用來對數據進行排序 |
Visible | 是否可見 |
除了可以手動配置這些列,還可以通過配置工具來進行配置相關的列屬性
格式化內容
上面提過每個BoundField列字段都有一個DataFormatString屬性,可以通過該屬性來使用格式化字符串控制數值和日期的顯示格式。
數值格式化字符串
貨幣 | {0:C} |
科學計數法 | {0:E} |
百分比 | {0:P} |
固定浮點數 | {0:F?} ?保留小數的位數 |
日期格式化字符串
短日期 | {0:d} 2012-11-12 |
長日期與短時間 | {0:f} 2010年11月12日 23:10 |
長日期 | {0:D} 2010年11月12日 |
長日期與長時間 | {0:F} 2010年11月12日 23:10:11 |
ISO標准格式 | {0:s} 2010-1-2T21:22:22 |
月和日 | {0:M} 10月20日 |
一般格式 | {0:G} 2010-10-31 23:12:12 |
除此之外還可以通過自定義的形式來設置。
- 年:yyyy 代表4位數年 yy代表2位數年
- 月:MM代表2位數月 M代表一位數月
- 日:dd
- 小時:HH
- 分鍾:mm
- 秒:ss
示例:{0:yy-M-d H:m:s} 12-1-3 5:12:3
格式化特定的值
我們可以通過行的特定屬性來進行樣式的渲染達到高亮或者內容醒目的效果,有這種需求的時候我們需要借助一個事件RowDataBound事件,當綁定數據的時候對每一行進行單獨特殊的設置。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow) {
int type = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "CategoryId"));
if (type == 4) {
e.Row.ForeColor = System.Drawing.Color.Red;
e.Row.ToolTip = "類型為4";
}
}
}
顯示效果
下章我們講解GridView的基本操作