代码之家  ›  专栏  ›  技术社区  ›  Evan Tan

C中“我的导出”按钮(btnExport)的更改#

  •  -1
  • Evan Tan  · 技术社区  · 7 年前

    这是我的代码,用于将一个简单的Datatable导出到CSV文件程序。我的程序实际上是运行一个网站来存储数据库并将数据库转换为 .csv 使用“导出”按钮创建文件。

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Data.SqlClient;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class Contact : System.Web.UI.Page
    {
    
        SqlConnection sqlCon = new SqlConnection(@"Data Source= DESKTOP-25V3I8O;Initial Catalog=ASPCRUD;Integrated Security=true");
        DataTable dtbl = new DataTable();
    
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                btnDelete.Enabled = false;
                FillGridView();
            }
        }
    
        protected void btnClear_Click(object sender, EventArgs e)
        {
            Clear();
        }
    
        public void Clear()
        {
            hfContactID.Value = "";
    
            txtName.Text = txtMobile.Text = txtAddress.Text = txtPostcode.Text = "";
            lblSuccessMessage.Text = lblErrorMessage.Text = "";
            btnSave.Text = "Save";
            btnDelete.Enabled = false;
        }
    
        protected void btnSave_Click(object sender, EventArgs e)
        {
            if (sqlCon.State == ConnectionState.Closed)
                sqlCon.Open();
            SqlCommand sqlCmd = new SqlCommand("ContactCreateOrUpdate", sqlCon);
            sqlCmd.CommandType = CommandType.StoredProcedure;
            sqlCmd.Parameters.AddWithValue("@ContactID",(hfContactID.Value==""?0:Convert.ToInt32(hfContactID.Value)));
            sqlCmd.Parameters.AddWithValue("@Name", txtName.Text.Trim());
            sqlCmd.Parameters.AddWithValue("@Mobile", txtMobile.Text.Trim());
            sqlCmd.Parameters.AddWithValue("@Address", txtAddress.Text.Trim());
            sqlCmd.Parameters.AddWithValue("@Postcode", txtPostcode.Text.Trim());
            sqlCmd.ExecuteNonQuery();
            sqlCon.Close();
            string ContactID = hfContactID.Value;
            Clear();
            if (ContactID=="")
                lblSuccessMessage.Text = "Saved Successfully";
            else
                lblSuccessMessage.Text = "Updated Successfully";
    
            FillGridView();
        }
    
        void FillGridView()
        {
            if (sqlCon.State == ConnectionState.Closed)
                sqlCon.Open();
            SqlDataAdapter sqlData = new SqlDataAdapter("ContactViewAll", sqlCon);
            sqlData.SelectCommand.CommandType = CommandType.StoredProcedure;    
            sqlData.Fill(dtbl);
            sqlCon.Close();
            gvContact.DataSource = dtbl;
            gvContact.DataBind();
        }
    
        protected void lnk_OnClick(object sender, EventArgs e)
        {
            int ContactID = Convert.ToInt32((sender as LinkButton).CommandArgument);
            if (sqlCon.State == ConnectionState.Closed)
                sqlCon.Open();
            SqlDataAdapter sqlData = new SqlDataAdapter("ContactViewByID", sqlCon);
            sqlData.SelectCommand.CommandType = CommandType.StoredProcedure;
            sqlData.SelectCommand.Parameters.AddWithValue("@ContactID", ContactID);
            sqlData.Fill(dtbl);
            sqlCon.Close();
            hfContactID.Value = ContactID.ToString();
            txtName.Text = dtbl.Rows[0]["Name"].ToString();
            txtMobile.Text = dtbl.Rows[0]["Mobile"].ToString();
            txtAddress.Text = dtbl.Rows[0]["Address"].ToString();
            txtPostcode.Text = dtbl.Rows[0]["Postcode"].ToString();
            btnSave.Text = "Update";
            btnDelete.Enabled = true;
        }
    
    
        protected void btnDelete_Click(object sender, EventArgs e)
        {
            if (sqlCon.State == ConnectionState.Closed)
                sqlCon.Open();
            SqlCommand sqlCmd = new SqlCommand("ContactDeleteByID", sqlCon);
            sqlCmd.CommandType = CommandType.StoredProcedure;
            sqlCmd.Parameters.AddWithValue("ContactID", Convert.ToInt32(hfContactID.Value));
            sqlCmd.ExecuteNonQuery();
            sqlCon.Close();
            Clear();
            FillGridView();
            lblSuccessMessage.Text = "Deleted Successfully";
        }
    
        protected void ExportDataTableToCSV()
        {
            Response.Clear();
            Response.ContentType = "text/csv";
            Response.AddHeader("content-disposition", "attachment;filename=UserDetails.csv");
    
            StringBuilder sb = new StringBuilder();
    
            for (int i = 0; i < dtbl.Columns.Count; i++)
            {
                sb.Append(dtbl.Columns[i].ColumnName + ',');
            }
            sb.Append(Environment.NewLine);
    
            for (int j = 0; j < dtbl.Rows.Count; j++)
            {
                for (int k = 0; k < dtbl.Columns.Count; k++)
                {
                    sb.Append(dtbl.Rows[j][k].ToString() + ',');
                }
                sb.Append(Environment.NewLine);
            }
            Response.Write(sb);
            Response.Flush();
            Response.End();
        }
    
    
        protected void btnExport_Click(object sender, EventArgs e)
        {
            ExportDataTableToCSV();
        }
    }
    

    我的程序还有一个专为数据输入页设计的页面。它包含 Name , Address , Mobile Postcode . 它有一个由系统自动生成的用户帐号。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Xavave    7 年前

    当您单击export按钮时,会发生回发,您会丢失datatable的内容,所以只需尝试删除:

    if (!IsPostBack)
    

    因此,它将是:

     protected void Page_Load(object sender, EventArgs e)
    {
            btnDelete.Enabled = false;
            FillGridView();
    
    }
    

    以下是基于您的代码的工作示例:

     DataTable table = new DataTable();
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
                table.Columns.Add("Dosage", typeof(int));
                table.Columns.Add("Drug", typeof(string));
                table.Columns.Add("Patient", typeof(string));
                table.Columns.Add("Date", typeof(DateTime));
    
                // Here we add five DataRows.
                table.Rows.Add(25, "Indocin", "David", DateTime.Now);
                table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
                table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
                table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
                table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);
    
        }
    
    
    
        protected void ExportDataTableToCSV()
        {
            Response.Clear();
            Response.ContentType = "text/csv";
            Response.AddHeader("content-disposition", "attachment;filename=UserDetails.csv");
    
            StringBuilder sb = new StringBuilder();
    
            for (int i = 0; i < table.Columns.Count; i++)
            {
                sb.Append(table.Columns[i].ColumnName + ',');
            }
            sb.Append(Environment.NewLine);
    
            for (int j = 0; j < table.Rows.Count; j++)
            {
                for (int k = 0; k < table.Columns.Count; k++)
                {
                    sb.Append(table.Rows[j][k].ToString() + ',');
                }
                sb.Append(Environment.NewLine);
            }
            Response.Write(sb);
            Response.Flush();
            Response.End();
        }
    
    
        protected void btnExport_Click(object sender, EventArgs e)
        {
            ExportDataTableToCSV();
        }