GridView
出自ProgWiki
GridView,System.Web.UI.WebControls.GridView
匯出
匯出成Execl
- 程式碼
this.Response.Clear(); { using (System.IO.StringWriter sw = new System.IO.StringWriter()) { using (HtmlTextWriter hw = new HtmlTextWriter(sw)) { string strToday = DateTime.Now.ToString("d"); this.Response.ContentType = "application/x-msexcel"; this.Response.AddHeader("content-disposition", "attachment; filename=" + strToday + ".xls"); this.GridView1.RenderControl(hw); this.Response.Write(sw.ToString()); } } } this.Response.End();
- 必要函數(不然 this.GridView1.RenderControl(hw); 會彈出錯誤)
//必須覆寫 Page.VerifyRenderingInServerForm public override void VerifyRenderingInServerForm(Control control) { }
其他轉資料到Execl的方法
滑鼠點選資料列, 快速進入編輯模式
- GridView1 需使用 RowDataBound 事件處理函數
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { //標題列時, e.Row.RowIndex 則為 -1, 其他資料列的 e.Row.RowIndex 則從1開始增值 if (e.Row.RowIndex != -1) { for (int i = 1; i < e.Row.Cells.Count; i++) { //onclick="javascript:__doPostBack('GridView1','Edit$1')" e.Row.Cells[i].Attributes["onclick"] = string.Format( "javascript:__doPostBack('GridView1','Edit${0}')", e.Row.RowIndex ); //style="cursor:hand" 在FireFox下不可用,應改為 style="cursor:pointer" e.Row.Cells[i].Style["cursor"] = "pointer"; } } }
GridView分頁效果
GridView分頁效果(1)
用法:
- 先下載它的範例[1]
- 解壓縮後,把它的範例裡的檔案 GridViewWithPager.cs 與 PagerLinkButton.cs 複製到你的網站的 App_Code 目錄裡。
- 在你的.aspx 頁面中加入相關的CSS定義(參照它的Default.aspx)。
- 在你的.aspx 頁面上,加入 <%@ Register Namespace="App_Code" TagPrefix="ac" %>
- 在你的.aspx 頁面上把 <asp:GridView 與 </asp:GridView> 分別置換為 <ac:GridViewWithPager UseCustomPager="true" 與 </ac:GridViewWithPager>
GridView分頁效果(2)
GridView分頁效果(其他)
滑鼠在資料列上移動時, 資料列改變底色
FAQ
為什麼在 GridView 裡所設定的 DataFormatString 沒有效?
- 在 GridView 控制項的各個 BoundField 資料行設定了 DataFormatString 屬性之後,必須將 BoundField 資料行的 HtmlEncode 屬性設定成 False。
發怖到遠端的IIS時,原本GridView的各行的【編輯】超連結,變成【Edit】
- 需在那台的Windows安裝 .NetFramework 對應版本的繁體中文語言套件。
自動編號欄位
欄位內容不斷行
- 標題列用
<HeaderStyle Wrap="False" />
- 資料列用
<ItemStyle Wrap="False" />
多行檔頭
重複內容的欄位,垂直合併
在資料列上自訂按鈕
資料欄依條件變色
呈現RSS內容
- 「ASP.NET」 利用GridView呈現RSS內容(以XmlDocument載入RSS,將其顯示到GridView上)
GridView與FormView整合應用
GridView透過DataView.RowFilter去顯示經過篩選過後的資料
自訂GridView的排序
在GridView裡將\n轉換成Html的斷行
<ItemTemplate>
<%# ((string)Eval("Details")).Replace("\n", "<br/>") %>
</ItemTemplate>
或
<ItemTemplate>
<%# FormatString(Eval("Details")) %>
</ItemTemplate>
GridView減肥
- 在欄位的<ItemTemplate>裡,如果用<asp:Label ...></asp:Label> 但未需要做<span>...</span>顯示的話,不如改成使用<asp:Literal ...></asp:Literal>,這樣就不會輸出完整的控制項到用戶端,只會輸出文字內容
- 以自訂的CSS標簽去取代在<ItemStyle>裡的一堆對齊或顏色的定義
- 例如:<ItemStyle HorizontalAlign="Center" />會產生 style="text-align: center",如果改用ItemStyle-CssClass="center" 則產生 class="center" , 配合 <style type="text/css"> .center { text-align: center; } </style> 使用
在Header放上刪除的按鈕
- GridView1裡的第1個欄位
<asp:TemplateField HeaderStyle-Width="57px" ItemStyle-HorizontalAlign="Center"> <HeaderTemplate> <asp:IButton ID="ButtonDeleteSelect" runat="server" CausesValidation="False" Text="刪除" OnClientClick="return confirm('你確定要刪除嗎?');" OnClick="ButtonDeleteSelect_Click"/> </HeaderTemplate> <ItemTemplate> <asp:CheckBox ID="CheckBox1" runat="server" /> </ItemTemplate> </asp:TemplateField>
- 程式碼
protected List<string> SelectID = new List<string>(); protected void ButtonDeleteSelect_Click(object sender, EventArgs e) { SelectID.Clear(); for (int i = 0; i < GridView1.Rows.Count; i++) { CheckBox CheckBox1 = GridView1.Rows[i].Cells[0].FindControl("CheckBox1") as CheckBox; if (CheckBox1.Checked == true) { SelectID.Add(GridView1.DataKeys[i].Value.ToString()); } } if (SelectID.Count > 0) { //實際操作DB作刪除資料的動作... } }
GridView裡的控制項事件失效
- 關於GridView控制項常用的事件的發生順序
- 原因可能出在非PostBack時,又對GridView做了資料繫結,因此導致無法正常觸發GridView裡的控制項事件
- 後置程式碼的資料繫結,需覆寫下列GridView的事件
- 相關:GridViewHelper.cs
protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) GridView1_DataBinding(); } protected void GridView1_DataBinding() { GridViewHelper.setDataBinding(GridView1, SqlDataSource1, ViewState); } protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { GridViewHelper.setSorting(sender, e, ViewState); GridView1_DataBinding(); } protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) { this.GridView1.PageIndex = e.NewPageIndex; GridView1_DataBinding(); } protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView3.EditIndex = e.NewEditIndex; GridView3_DataBinding(); } protected void GridView3_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { GridView1.EditIndex = -1; GridView1_DataBinding(); } ==其他== * [http://www.knowsky.com/340029.html ASP.NET2.0下含有DropDownList的GridView编辑、删除的完整例子!] * [http://www.microsoft.com/taiwan/msdn/columns/huang_jhong_cheng/ASP_NET_GridView.htm ASP.NET 2.0 GridView 範例集] * [http://www.dotblogs.com.tw/jeff377/archive/2008/10/27/5793.aspx 讓你的 GridView 與眾不同] * [http://hi.baidu.com/leosoft/blog/item/61b998bfd501770618d81f0b.html 在空的GridView中显示Header、Footer列@ASP.Net] * [http://tw.myblog.yahoo.com/jw!UIpaLOyBBQRqPnlwtNFErQ--/article?mid=325&next=324&l=f&fid=9 GridView中的Templete中的Control的格式化] [[Category:GridView]]