動態(tài)添加模板列_第1頁
動態(tài)添加模板列_第2頁
動態(tài)添加模板列_第3頁
動態(tài)添加模板列_第4頁
動態(tài)添加模板列_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、asp.Net中Gridview動態(tài)創(chuàng)建模板列 Web中有時候數據源字段不確定,需要在綁定后添加新的字段,有沒有方法了?方法是有的:之前也在網上搜索過,找到了一些方法,通過模板列可以實現。這里借鑒一下,自己親自試驗了一下,達到了想要的效果。Gridview動態(tài)添加模板列,下面就添加一空白列作為示例。前臺代碼:csharp view plaincopyprint?1. <SPAN style="FONT-SIZE: 16px"><% Page Language="C#" EnableEve

2、ntValidation="false" AutoEventWireup="true" CodeBehind="WebForm3.aspx.cs"  2.     Inherits="WebApplication1.WebForm3" %>  3.   4. <!DOCTYPE html PUBLIC "-/W3C/DTD X

3、HTML 1.0 Transitional/EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">  5. <html xmlns="/1999/xhtml">  6. <head runat="server">  7.     <title&

4、gt;無標題頁</title>  8. </head>  9. <body>  10.     <form id="form1" runat="server">  11.     <div>  12.     </div>  1

5、3.     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">  14.         <Columns>  15.          &

6、#160;  <asp:BoundField DataField="SID" HeaderText="學生ID" ReadOnly="True" />  16.             <asp:BoundField DataField="SName" HeaderText=&qu

7、ot;姓名" />  17.             <asp:BoundField DataField="SAge" HeaderText="年齡" />  18.             <asp:Bo

8、undField DataField="SSex" HeaderText="性別" />  19.             <asp:BoundField DataField="SCollege" HeaderText="所屬學院" />  20.   

9、0;         <asp:CommandField HeaderText="選擇" ShowSelectButton="True" />  21.         </Columns>  22.     </asp:GridView>&#

10、160; 23.     <br />  24.     <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />  25.     </form>&

11、#160; 26. </body>  27. </html></SPAN><SPAN style="FONT-SIZE: 24px">  28. </SPAN>  <% Page Language="C#" EnableEventValidation="false" AutoEventWireup="true" CodeBehind="WebForm3

12、.aspx.cs" Inherits="WebApplication1.WebForm3" %><!DOCTYPE html PUBLIC "-/W3C/DTD XHTML 1.0 Transitional/EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head runat="server"

13、> <title>無標題頁</title></head><body> <form id="form1" runat="server"> <div> </div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> <Columns> <asp:BoundField DataField=

14、"SID" HeaderText="學生ID" ReadOnly="True" /> <asp:BoundField DataField="SName" HeaderText="姓名" /> <asp:BoundField DataField="SAge" HeaderText="年齡" /> <asp:BoundField DataField="SSex" HeaderText="性別&q

15、uot; /> <asp:BoundField DataField="SCollege" HeaderText="所屬學院" /> <asp:CommandField HeaderText="選擇" ShowSelectButton="True" /> </Columns> </asp:GridView> <br /> <asp:Button ID="Button1" runat="server" Tex

16、t="Button" OnClick="Button1_Click" /> </form></body></html>后臺綁定數據庫數據代碼如下: csharp view plaincopyprint?1. public static string ConnectionString = "Data Source=.;Initial Catalog=StudentMSG;Persist  Security 

17、Info=True;User ID=sa;Password=sa"  2.        protected void Page_Load(object sender, EventArgs e)  3.          4.         

18、60;  if (!IsPostBack)  5.              6.                BindData();  7.         

19、0;    8.          9.        private void BindData()  10.          11.            

20、;/ make the query    12.            string query = "SELECT * FROM Stable"  13.            SqlConnection m

21、yConnection = new SqlConnection(ConnectionString);  14.            SqlDataAdapter ad = new SqlDataAdapter(query, myConnection);  15.         

22、0;  DataSet ds = new DataSet();  16.            ad.Fill(ds, "Stable");  17.            GridView1.DataSource = ds;&#

23、160; 18.            GridView1.DataKeyNames = new string  "SID" /主鍵   19.            GridView1.DataBind();  20.   &#

24、160;       public static string ConnectionString = "Data Source=.;Initial Catalog=StudentMSG;Persist Security Info=True;User ID=sa;Password=sa" protected void Page_Load(object sender, EventArgs e) if (!IsPostBack) BindData(); private void BindData() / make the

25、 query string query = "SELECT * FROM Stable" SqlConnection myConnection = new SqlConnection(ConnectionString); SqlDataAdapter ad = new SqlDataAdapter(query, myConnection); DataSet ds = new DataSet(); ad.Fill(ds, "Stable"); GridView1.DataSource = ds; GridView1.DataKeyNames = new s

26、tring "SID" ;/主鍵 GridView1.DataBind(); 顯示的界面如下: 那么,怎添加一列呢?動態(tài)添加列,關鍵是實現 ITemplate.InstantiateIn 方法。下面就自定義一個GridViewTemplatecsharp view plaincopyprint?1. public class GridViewTemplate : ITemplate  2.           3.

27、            public delegate void EventHandler(object sender, EventArgs e);  4.             public event EventHandler eh; 

28、; 5.             private DataControlRowType templateType;  6.             private string columnName;  7.      

29、       private string controlID;  8.             public GridViewTemplate(DataControlRowType type, string colname)  9.       &

30、#160;       10.                 templateType = type;  11.                 columnName&

31、#160;= colname;  12.               13.             public GridViewTemplate(DataControlRowType type, string controlID, string 

32、colname)  14.               15.                 templateType = type;  16.        

33、0;        this.controlID = controlID;  17.                 columnName = colname;  18.          

34、     19.             public void InstantiateIn(System.Web.UI.Control container)  20.               21.    

35、;             switch (templateType)  22.                   23.            &

36、#160;        case DataControlRowType.Header:  24.                         Literal lc = new Literal();

37、0; 25.                         lc.Text = columnName;  26.                 &

38、#160;       (lc);  27.                         break;  28.            

39、         case DataControlRowType.DataRow:/可以定義自己想顯示的控件以及綁定事件   29.                         break;  30.  &

40、#160;                  default:  31.                         break;  3

41、2.                   33.               34.          public class GridViewTemplate : ITemplate p

42、ublic delegate void EventHandler(object sender, EventArgs e); public event EventHandler eh; private DataControlRowType templateType; private string columnName; private string controlID; public GridViewTemplate(DataControlRowType type, string colname) templateType = type; columnName = colname; public

43、 GridViewTemplate(DataControlRowType type, string controlID, string colname) templateType = type; this.controlID = controlID; columnName = colname; public void InstantiateIn(System.Web.UI.Control container) switch (templateType) case DataControlRowType.Header: Literal lc = new Literal(); lc.Text = c

44、olumnName; container.Controls.Add(lc); break; break; default: break; GridView模板定義好了。現在就可以添加新列,重寫OnInit,代碼如下: csharp view plaincopyprint?1. protected override void OnInit(EventArgs e)  2.       3.        &#

45、160;TemplateField customField = new TemplateField();  4.         customField.ShowHeader = true;  5.         customField.HeaderTemplate = new GridViewTempla

46、te(DataControlRowType.Header, "添加行");/添加的列標題   6.         GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, "");/空白列   7.        

47、0;customField.ItemTemplate = gvt;  8.         GridView1.Columns.Add(customField);  9.         base.OnInit(e);  10.        protected override void OnIn

48、it(EventArgs e) TemplateField customField = new TemplateField(); customField.ShowHeader = true; customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "添加行");/添加的列標題 GridViewTemplate gvt = new GridViewTemplate(DataControlRowType.DataRow, "");/空白列 customField

49、.ItemTemplate = gvt; GridView1.Columns.Add(customField); base.OnInit(e); 到此就可以顯示新添加的列了。效果如下: 因為之前遇到這樣的問題:Gridview在綁定數據源后,發(fā)覺要添加新字段,即添加一列數據,而且要導出到Excel。按照一般的添加之后,導出Excel后發(fā)覺新添加的那列數據似乎并沒有導出到Excel。如果用模板列的話,就可以解決上述的問題。導出Excel代碼如下:csharp view plaincopyprint?1. protected void Button1_Click(object&

50、#160;sender, EventArgs e)  2.       3.         if (GridView1 != null)  4.           5.         

51、    Response.Clear();  6.             Response.Buffer = true;  7.             Response.Charset = "GB2312" 

52、; 8.             Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode("訂卷統(tǒng)計") + ".xls");  9.     

53、0;       / 如果設置為 GetEncoding("GB2312");導出的文件將會出現亂碼!   10.             Response.ContentEncoding = System.Text.Encoding.UTF7;  11.     &#

54、160;       Response.ContentType = "application/ms-excel"/設置輸出文件類型為excel文件。    12.             System.IO.StringWriter oStringWriter = new System.IO.Str

55、ingWriter();  13.             System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);  14.            

56、60;this.GridView1.RenderControl(oHtmlTextWriter);  15.             (oStringWriter.ToString();  16.             Response.Flush();  17.             Response.End();  18.     

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論