【问题标题】:upload excel and import data to datatable and show to user in gridview for edit, update and then insert into database table上传excel并将数据导入数据表并在gridview中显示给用户进行编辑,更新然后插入数据库表
【发布时间】:2014-12-29 20:42:40
【问题描述】:

我正在制作一个导入器,它最初会将 excel 上传到一个文件夹,然后我将向用户显示(我将在验证后将该数据放入数据表并显示给用户以进行任何编辑/更新或删除)该数据给用户.当用户验证一切看起来都很好时,用户应该点击保存按钮,数据将被保存到数据库表中。现在我有问题了。

  1. 首先将数据放入数据表中并显示给用户进行更新或删除是一个好主意或方法吗?
  2. 其次,我在 gridview 中显示数据,以便用户编辑或删除数据表中的任何行。
  3. 当我第一次单击编辑时遇到问题,它什么也没做。实际上我必须在编辑链接上单击两次,然后 gridview 进入编辑模式。我有谷歌这个问题,他们说我必须用数据源重新绑定gridview........现在问题是当我在rowediting事件上重新绑定它时数据表对象为空。那么该怎么办。我在下面粘贴了我的代码。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;
    using System.IO;
    using System.Data.SqlClient;
    using System.Data.OleDb;
    
    public partial class ImportExcelToDatabase : System.Web.UI.Page{
    DataSet ds;
    DataTable Dt;
    protected void Page_Load(object sender, EventArgs e)
    {
    
    }
    protected void btnIpload_Click(object sender, EventArgs e)
    {
        ImporttoDatatable();
    
    }
    private void ImporttoDatatable()
    {
        try
        {
            if (FlUploadcsv.HasFile)
            {
                string FileName = FlUploadcsv.FileName;
                string path = string.Concat(Server.MapPath("~/Document/" + FlUploadcsv.FileName));
    
                FlUploadcsv.PostedFile.SaveAs(path);
    
                OleDbConnection OleDbcon = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;");
    
                OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", OleDbcon);
                OleDbDataAdapter objAdapter1 = new OleDbDataAdapter(cmd);
                ds = new DataSet();
                //Dt.Clear(); ds.Clear();
                objAdapter1.Fill(ds);                
                Dt = ds.Tables[0];
                DataColumn dc = Dt.Columns.Add("Ser", typeof(Int32));                
                int count = 0;
                foreach (DataRow item in Dt.Rows)
                {
                    count++;
                    item["Ser"] = count;
                }
    
                gvEmployee.DataSource = Dt;
                gvEmployee.DataBind();
            }
        }
        catch (Exception ex)
        {
    
        }
    }
    
    protected void gvEmployee_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
    
    }
    protected void gvEmployee_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gvEmployee.EditIndex = e.NewEditIndex;
        gvEmployee.DataSource = Dt;
        gvEmployee.DataBind();
    
    }
    protected void gvEmployee_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        gvEmployee.EditIndex = -1;
        gvEmployee.DataSource = Dt;
        gvEmployee.DataBind();
    
    }
    

    }

【问题讨论】:

  • 您是说当您单击“编辑”按钮时页面正在回发并且数据表Dt 设置为空?因此,您必须将 Datatable 存储为 Session 或类似...

标签: c# asp.net gridview datatable


【解决方案1】:

停止使用全局变量!

话虽如此,看起来您将 Dt 设置为上传的数据,然后设置编辑索引,然后将网格视图绑定到未修改的 Dt 变量。

从那里开始,希望其余的一切都会到位。

【讨论】:

    【解决方案2】:

    我的问题是通过根据要求调整流程来解决的。现在我只是从 excel 文件中读取数据并验证它,就像列的数据类型应该是正确的,所以应该没有未定义的值,然后将它插入到数据库表中,如果有任何验证错误,我会向用户显示一条消息excel文件单元格#中输入错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      相关资源
      最近更新 更多