2014-04-08 29 views
0

我的页面中有以下内容。基于按钮点击的Gridview数据绑定

  • 2个天冬氨酸按钮
  • 1的GridView
  • 1图像按钮导出到Excel

我需要根据各个按钮,以查看gridview的。即每个按钮将具有不同的数据来显示。另外gridview应该允许分页,因为有很多记录。导出到Excel也应该发生在单击图像按钮时包括gridview中的所有页面。任何人都可以帮忙吗?我的代码如下

aspx文件。

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 
    <div> 
    <table id="Table2" width="100%" align="left" runat="server"> 
     <tr> 
     <td class="auto-style8"> 
     </td> 
     <td class="auto-style9"></td><td class="auto-style10"> 
      <asp:Button ID="Admin" runat="server" Text="Admin" TOOLTIP="Sign In" TABINDEX="3" BackColor="Gray" BorderColor="Black" BorderStyle="Groove" Font-Bold="True" Font-Names="Arial" Font-Size="Large" ForeColor="White" Height="46px" Width="85px"/> 
       <asp:Menu ID="Menu1" runat="server" StaticSubMenuIndent="" Font-Bold="True" Font-Size="Large"> 
       <Items> 
        <asp:MenuItem Text="Home" Value="Home" NavigateUrl="Admin_Main.aspx"></asp:MenuItem> 
        <asp:MenuItem Text="Add Customer" Value="Add Customer" NavigateUrl="Add_Details.aspx"></asp:MenuItem> 
        <asp:MenuItem Text="Delete Customer" Value="Delete Customer" NavigateUrl="Delete_Customer.aspx"></asp:MenuItem> 

       </Items> 

      </asp:Menu> 
      <asp:LinkButton ID="logout" runat="server" OnClick="logout_click" Font-Bold="True" Font-Size="Large">Logout</asp:LinkButton> 
     </td> 
      </tr> 
      </table> 
      </div> 
      <div> 
    <asp:Label ID="Label1" runat="server" Text="UserName" Font-Bold="True" 
        Font-Size="X-Large"></asp:Label> 
    <asp:TextBox ID="userName" Name= "userName" runat="server" Font-Bold="True"></asp:TextBox> 

    </div> 
    <div> 
     <asp:Button ID="Button2" runat="server" Text="Email Log" OnClick= "Email_Click" Height="35px" Font-Bold="True" Font-Size="Medium" Width="90px"/> 
    <asp:Button ID="Button1" runat="server" Text="All Log" Height="35px" OnClick= "Log_Click" Font-Bold="True" Font-Size="Medium" Width="90px"/> 
    <asp:ImageButton ID="btnexport" runat="server" Height="35px" ImageUrl="~/Images/exp-xls.gif" Width="112px" OnClick="btnExport_Click" Visible="false" /> 
    </div> 
    <asp:GridView ID="GridView1" runat="server"> 
    </asp:GridView> 

</asp:Content> 

aspx.cs文件

public partial class Display_Log : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     string user = (string)(Session["user"]); 
     if (!IsPostBack) 
     { 
      if (user == null) 
      { 
       Response.Redirect("~/InvalidLogin.aspx"); 
      } 
      else 
      { 
       Admin.Text = user; 
       Admin.Enabled = false; 
      } 
     } 
    } 
    protected void Email_Click(object sender, EventArgs e) 
    { 

     SqlConnection cnn = new SqlConnection(); 
     string connStr = ConfigurationManager.ConnectionStrings["cnn"].ConnectionString; 
     cnn.ConnectionString = connStr; 
     cnn.Open(); 
     String sqlSelect = String.Format(" Select Customer_Name,Time_Send_Clicked,Reminder_Type from Email_Log where Username='{0}'",userName.Text.ToString().Trim()); 
     SqlCommand myCommand = new SqlCommand(sqlSelect, cnn); 
     SqlDataAdapter da = new SqlDataAdapter(myCommand); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 
     cnn.Close(); 
     btnexport.Visible = true; 



    } 
    protected void btnExport_Click(object sender, EventArgs e) 
    { 
     Response.ClearContent(); 
     Response.Buffer = true; 
     Response.AddHeader("content-disposition", string.Format("attachment; filename=ActivityReport_" + userName.Text + ".xls")); 
     Response.ContentType = "application/ms-excel"; 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter htw = new HtmlTextWriter(sw); 
     GridView1.AllowPaging = false; 
      GridView1.RenderControl(htw); 
     Response.Write(sw.ToString()); 
     Response.End(); 
    } 
    public override void VerifyRenderingInServerForm(Control control) 
    { 
     /* Verifies that the control is rendered */ 
    } 

    protected void Log_Click(object sender, EventArgs e) 
    { 
     SqlConnection cnn = new SqlConnection(); 
     string connStr = ConfigurationManager.ConnectionStrings["cnn"].ConnectionString; 
     cnn.ConnectionString = connStr; 
     cnn.Open(); 
     String sqlSelect = String.Format(" SELECT [Activity],[Time],[Ticket_Number] FROM Log where Username='{0}'", userName.Text.ToString().Trim()); 
     SqlCommand myCommand = new SqlCommand(sqlSelect, cnn); 
     SqlDataAdapter da = new SqlDataAdapter(myCommand); 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 
     GridView1.DataSource = dt; 
     GridView1.DataBind(); 
     cnn.Close(); 
     btnexport.Visible = true; 
    } 
    protected void logout_click(object sender, EventArgs e) 
    { 

     this.Session["user"] = null; 
     this.Session["group"] = null; 
     Response.Redirect("~/Default.aspx"); 
    } 
} 
+0

所以'btnExport_Click'仅打印显示的记录,并要导出所有点击时的记录?绑定看起来很好 – Tarun

+0

@Tarun是的你的权利,我需要导出所有记录。另外我需要在gridview中添加分页。 –

回答

0

要添加pagging u需要指定AllowPaging="True"这将增加pagging,但它不会工作,直到你指定这个被点击页面按钮时处理onclick事件 onpageindexchanging="GridView1_PageIndexChanging"

<asp:GridView ID="GridView1"AutoGenerateColumns="false" DataKeyNames="Identityrowoftable" AllowPaging="True" 
onpageindexchanging="GridView1_PageIndexChanging" /> 

在后面的代码添加此

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
    { 
     GridView1.PageIndex = e.NewPageIndex; 
     // you need to rebind gridview here 
     //just set the source and databind 
    } 

在此之后,打印部分

首先你需要明确控制,使不需要的元素不来,而打印。

private void ClearControls(Control control) 
    { 
     for (int i = control.Controls.Count - 1; i >= 0; i--) 
     { 
      ClearControls(control.Controls[i]); 
     } 

     if (!(control is TableCell)) 
     { 
      if (control.GetType().GetProperty("SelectedItem") != null) 
      { 
       LiteralControl literal = new LiteralControl(); 
       control.Parent.Controls.Add(literal); 
       try 
       { 
        literal.Text = 
         (string)control.GetType().GetProperty("SelectedItem"). 
          GetValue(control, null); 
       } 
       catch 
       { } 
       control.Parent.Controls.Remove(control); 
      } 
      else if (control.GetType().GetProperty("Text") != null) 
      { 
       LiteralControl literal = new LiteralControl(); 
       control.Parent.Controls.Add(literal); 
       literal.Text = 
        (string)control.GetType().GetProperty("Text"). 
         GetValue(control, null); 
       control.Parent.Controls.Remove(control); 
      } 
     } 
     return; 
    } 

为Excel导出

protected void btnExport_Click(object sender, EventArgs e) 
    { 
     // Reference your own GridView here 
     if (GridView1.Rows.Count > 65535) 
     { 
      //DisplayError("Export to Excel is not allowed" + 
      // "due to excessive number of rows."); 
      return; 
     } 

     Response.Clear(); 
     Response.AddHeader("Content-Disposition", "attachment;filename=nameofexcelfile_" + DateTime.Now+".xls"); 
     Response.Charset = ""; 

     // SetCacheability doesn't seem to make a difference (see update) 
     Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); 

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

     System.IO.StringWriter stringWriter = new System.IO.StringWriter(); 
     System.Web.UI.HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter); 

     // Replace all gridview controls with literals 

     GridView1.PagerSettings.Visible = false; 
     ClearControls(GridView1); 

     System.Web.UI.HtmlControls.HtmlForm form 
      = new System.Web.UI.HtmlControls.HtmlForm(); 
     Controls.Add(form); 
     form.Controls.Add(GridView1GridView1); 
     form.RenderControl(htmlWriter); 
     Response.Write(stringWriter.ToString()); 
     Response.End(); 
    } 

时如何使用ClearControl会打印出记录,没有分页按钮