GridView中如何实现导出含DropdownList、TextBox,实现分页及导出Excel数据

前台代码
 1 <%@ Page Language="C#" AutoEventWireup="true"  EnableEventValidation = "false" CodeFile="DropDownLIst.aspx.cs" Inherits="_20100608_Default" %>

 2 

 3 <%@ Register assembly="AspNetPager" namespace="Wuqi.Webdiyer" tagprefix="webdiyer" %>

 4 

 5 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

 6 

 7 <html xmlns="http://www.w3.org/1999/xhtml">

 8 <head runat="server">

 9 <title></title>

10 </head>

11 <body>

12 <form id="form1" runat="server">

13 <div>

14 <asp:GridView ID="grd" runat="server" BackColor="White" BorderColor="#E7E7FF" 

15 BorderStyle="None" BorderWidth="1px" CellPadding="3" 

16 GridLines="Horizontal" AutoGenerateColumns="False">

17 <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C"  />

18 <Columns>

19 

20 

21 <asp:BoundField DataField="ID" />

22 <asp:BoundField DataField="Name" />

23 <asp:TemplateField>

24 <ItemTemplate>

25 <asp:DropDownList  runat="server" ID="ddl" Width="50px"  AutoPostBack="true">

26 <asp:ListItem>1</asp:ListItem>

27 <asp:ListItem Selected="True">2</asp:ListItem>

28 </asp:DropDownList></ItemTemplate>

29 </asp:TemplateField >

30 <asp:TemplateField HeaderText="123">

31 <ItemTemplate>

32 <asp:TextBox ID="txt" runat="server" ></asp:TextBox></ItemTemplate>

33 </asp:TemplateField>

34 

35 </Columns>

36 <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />

37 <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />

38 <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />

39 <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />

40 <AlternatingRowStyle BackColor="#F7F7F7" />

41 </asp:GridView>

42 <asp:Button ID="btnDataToExcel" runat="server" Text="导入Excel" Width="166px" 

43 onclick="btnDataToExcel_Click"  />

44 <webdiyer:AspNetPager ID="PagerNet" runat="server"  PageSize="5" 

45 onpagechanged="PagerNet_PageChanged">

46 </webdiyer:AspNetPager>

47 </div>

48 </form>

49 </body>

50 </html>

后台代码:

数据绑定
 1 public partial class _20100608_Default : System.Web.UI.Page

 2 {

 3 DataSet ds=DBAccess.ExecuteDataset("Select row_number() over(order by Id) as num, * from person");

 4 protected void Page_Load(object sender, EventArgs e)

 5 {

 6 if (!IsPostBack)

 7 {

 8 OnBind();

 9 }

10 }

11 private void OnBind()

12 {

13 PagerNet.RecordCount= 12;

14 DataView  tb = ds.Tables[0].DefaultView;

15     tb.RowFilter = "num >= " + PagerNet.StartRecordIndex+" and  num <= " +PagerNet.EndRecordIndex ;

16 //grd.DataSource = DBAccess.ExecuteDataset("select * from (Select row_number() over(order by Id) as num, * from xls) n  where  n.num between " + PagerNet.StartRecordIndex + "and " + PagerNet.EndRecordIndex);

17 grd.DataSource = tb;

18 grd.DataBind();

19 for (int j = 0; j < grd.Rows.Count; j++)

20 {

21 DropDownList drp = grd.Rows[j].FindControl("ddl") as DropDownList;

22 drp.Items.Insert(0,"AA");

23 }

24 }
重点:Textbox等的显示
public void DisableControls(GridView gv)

         {

             for (int i = 0; i < gv.Rows.Count; i++)

             {

                 //dropdownlist

                 DropDownList drp = grd.Rows[i].FindControl("ddl") as DropDownList;

                 Label lb = new Label();

                 lb.Text = drp.SelectedItem.Text;

                 grd.Rows[i].Cells[2].Controls.Add(lb);

                 grd.Rows[i].Cells[2].Controls.RemoveAt(1); ;

                 //TextBox

                 TextBox txt = grd.Rows[i].FindControl("txt") as TextBox;

                 lb = new Label();

                 lb.Text = txt.Text;

                 grd.Rows[i].Cells[3].Controls.Add(lb);

                 grd.Rows[i].Cells[3].Controls.RemoveAt(1); ;

             }

         }
导出事件
 1 protected void btnDataToExcel_Click(object sender, EventArgs e)

 2         {

 3             StringWriter objStringWriter = new StringWriter();

 4             HtmlTextWriter objHtmlTextWriter = new HtmlTextWriter(objStringWriter);

 5             this.grd.AllowPaging = false;

 6             grd.DataSource = ds;

 7             grd.DataBind();

 8             DisableControls(grd);

 9             grd.RenderControl(objHtmlTextWriter);

10             string style = @"<html><head><meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" /><style> .text { mso-number-format:\@; } </style></head><body>";

11             Response.Clear();

12             Response.Buffer = true;

13             Response.AppendHeader("Content-Disposition", "attachment;filename=123.xls");

14             Response.ContentType = "application/ms-excel ";

15             Response.Write(style);

16             Response.Write(objStringWriter.ToString());

17             Response.Write("</body></html>");

18             Response.End();

19             OnBind();

20         }

21         public override void VerifyRenderingInServerForm(System.Web.UI.Control control)

22         {

23             //== 處理 GridView的控制項。 'GridView' 必須置於有 runat=server 的表單標記之中

24             //== http://msdn.microsoft.com/zh-tw/library/system.web.ui.page.verifyrenderinginserverform(VS.80).aspx

25             //—註解:或是在 Web.Config檔案裡面,增加這一行<pages enableEventValidation ="false" ></pages> 就可以免除上面這個事件。

26         }

27         protected void PagerNet_PageChanged(object sender, EventArgs e)

28         {

29             OnBind();

30         }

 

自己的项目:

image

 

image

 

前台的一部分
 1 <asp:GridView ID="gridView" runat="server" AllowPaging="True" Width="100%" CellPadding="3"

 2         OnPageIndexChanging="gridView_PageIndexChanging" BorderWidth="1px" DataKeyNames="payid"

 3         OnRowDataBound="gridView_RowDataBound" RowStyle-HorizontalAlign="Center" OnRowCreated="gridView_OnRowCreated"

 4         OnRowEditing="gridView_RowEditing" AutoGenerateColumns="False">

 5         <Columns>

 6             <%--1.序列号--%>

 7             <asp:TemplateField HeaderText="序列号" ShowHeader="False" Visible="false">

 8                 <ItemTemplate>

 9                     <asp:Label ID="lab_Payid" runat="server" Text='<%# Bind("payid") %>' Width="70"></asp:Label>

10                 </ItemTemplate>

11             </asp:TemplateField>

12             <%--2.选择--%>

13             <asp:TemplateField ControlStyle-Width="30" HeaderText="选择">

14                 <ItemTemplate>

15                     <asp:CheckBox ID="DeleteThis" onclick="javascript:CCA(this);" runat="server" />

16                 </ItemTemplate>

17                 <ControlStyle Width="30px"></ControlStyle>

18             </asp:TemplateField>

19             <%-- 3.月份--%>

20             <asp:TemplateField HeaderText="月份" SortExpression="dataMoth">

21                 <ItemTemplate>

22                     <% if (this.ddl_YesNo_State.SelectedValue == "未发放")

23                        {%>

24                     <asp:Label ID="Label1" runat="server" Text='<%# subString((DateTime.Now.ToString("yyyy年MM月")).ToString())%>'

25                         Width="70"></asp:Label>

26                     <%}

27                        else

28                        {

29                     %>

30                     <asp:Label ID="Label4" runat="server" Text='<%# subString((Eval("dataMoth")).ToString())%>'

31                         Width="70"></asp:Label>

32                     <%} %>

33                 </ItemTemplate>

34                 <EditItemTemplate>

35                     <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("dataMoth") %>'></asp:TextBox>

36                 </EditItemTemplate>

37                 <ItemStyle HorizontalAlign="Center" />

38             </asp:TemplateField>

39             <%--4.部门--%>

40             <asp:TemplateField HeaderText="部门" SortExpression="departmentName">

41                 <ItemTemplate>

42                     <asp:Label ID="Label2" runat="server" Text='<%# Bind("departmentName") %>' Width="70"></asp:Label>

43                 </ItemTemplate>

44                 <EditItemTemplate>

45                     <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("departmentName") %>'></asp:TextBox>

46                 </EditItemTemplate>

47                 <ItemStyle HorizontalAlign="Center" />

48             </asp:TemplateField>

49             <%--5.姓名--%>

50             <asp:TemplateField HeaderText="姓名" SortExpression="EName">

51                 <ItemTemplate>

52                     <asp:Label ID="Label3" runat="server" Text='<%# Bind("EName") %>' Width="70"></asp:Label>

53                 </ItemTemplate>

54                 <EditItemTemplate>

55                     <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("EName") %>'></asp:TextBox>

56                 </EditItemTemplate>

57                 <ItemStyle HorizontalAlign="Center" />

58             </asp:TemplateField>

59             <%--6.基本工资--%>

60             <asp:TemplateField HeaderText="基本工资" SortExpression="basePay">

61                 <ItemTemplate>

62                     <asp:TextBox ID="txt_basePay" runat="server" Text='<%# Bind("basePay", "{0:0.00}") %>'

63                         Width="70"></asp:TextBox>

64                 </ItemTemplate>

65                 <EditItemTemplate>

66                     <asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("basePay", "{0:000.00}") %>'></asp:TextBox>

67                 </EditItemTemplate>

68                 <ItemStyle HorizontalAlign="Center" />

69             </asp:TemplateField>
后台的一部分
 1         #region 导入Excel

 2 

 3         protected void btn_Excel_Click(object sender, EventArgs e)

 4         {

 5             Export("application/ms-excel", "工资表.xls");

 6         }

 7 

 8         public void DisableControls(GridView gv)

 9         {

10             for (int i = 0; i < gv.Rows.Count; i++)

11             {

12                 TextBox txt = gridView.Rows[i].FindControl("txt_basePay") as TextBox;

13                 Label lb = new Label();

14                 lb.Text = txt.Text;

15                 gridView.Rows[i].Cells[5].Controls.Add(lb);

16                 gridView.Rows[i].Cells[5].Controls.RemoveAt(1); ;

17             }

18         }

19 

20         private void Export(string FileType, string FileName)

21         {

22             //GridView导出到Excel,导出所有页   

23             Response.Charset = "GB2312";

24             Response.ContentEncoding = System.Text.Encoding.UTF8;//换成UTF7编码出现乱码   

25             Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).ToString());

26             Response.ContentType = FileType;

27             this.EnableViewState = false;

28             StringWriter tw = new StringWriter();

29             HtmlTextWriter hw = new HtmlTextWriter(tw);

30 

31             this.gridView.AllowPaging = false;//取消分页   

32             this.gridView.AllowSorting = false;//取消排序   

33             //this.GridView1.AutoGenerateColumns = true;//取消自动生成列  

34             if (this.ddl_YesNo_State.SelectedValue == "未发放")

35             {

36                 BindData();

37             }

38             else

39             {

40                 BindData_Save();

41             }

42             DisableControls(gridView);

43             //GridView的独立绑定函数 

44 

45             //让一列不显示的方法

46             //this.gridView.Columns[0].Visible = false;

47             //this.gridView.Columns[7].Visible = false;

48             //this.gridView.Columns[6].Visible = false;

49             gridView.RenderControl(hw);

50             Response.Write(tw.ToString());

51             Response.End();

52         }

53 

54         //要导出EXCEL 必须重写VerifyRenderingInServerForm

55         public override void VerifyRenderingInServerForm(Control control)

56         {

57 

58         }

59 

60         #endregion

你可能感兴趣的:(GridView)