【问题标题】:Join/merge two excel files in asp.net and display them in gridview在asp.net中加入/合并两个excel文件并在gridview中显示
【发布时间】:2012-12-18 09:22:52
【问题描述】:

我正在尝试在 asp.net 中合并两个 excel 文件,并将它们作为一个表格显示在 gridview 中。下面的代码只显示一个表。谁能告诉我下面的代码有什么问题?如果您有更好的想法,请告诉我。

protected void MergTables()
        {
            string connString = ConfigurationManager.ConnectionStrings[hwTypes].ConnectionString;
            OleDbConnection DBConnection = new OleDbConnection(connString);
            DBConnection.Open();
            OleDbCommand DBCommand = new OleDbCommand("SELECT * FROM [Sheet1$]", DBConnection);
            OleDbDataAdapter da = new OleDbDataAdapter(DBCommand);
            DataSet ds = new DataSet("Stock");
            da.Fill(ds, "HWTypes");
            DBConnection.Close();
            string _stockConn = ConfigurationManager.ConnectionStrings[stockConn].ConnectionString;
            DBConnection = new OleDbConnection(_stockConn);
            DBConnection.Open();
            DBCommand = new OleDbCommand("SELECT * FROM [Stock_voorlopig$]", DBConnection);
            da = new OleDbDataAdapter(DBCommand);
            da.Fill(ds, "Stock");

            DBConnection.Close();
            for (int i = 0; i < ds.Tables["HWTypes"].Rows.Count; i++)
            {
                ds.Tables["HWTypes"].Rows[i]["ProductID"] = ds.Tables["Stock"].Rows[i]["Partno"];
            }

            GridView1.DataSource = ds.Tables["Stock"];
            GridView1.DataBind();
        }

【问题讨论】:

    标签: asp.net linq


    【解决方案1】:

    问题是您在GridView 中只使用了一个DataTable,而您还没有加入两者。

    这是一种使用Linq-To-DataSet 连接两个表并创建匿名类型作为GridView 的数据源的方法。

    DataSet ds = new DataSet("Stock");
    using (var dbConnection = new OleDbConnection(connString))
    using (var dbCommand = new OleDbCommand("SELECT * FROM [Sheet1$]", dbConnection))
    using (var da = new OleDbDataAdapter(dbCommand))
    {
        da.Fill(ds, "HWTypes");
    }
    
    using (var dbConnection = new OleDbConnection(stockConn))
    using (var dbCommand = new OleDbCommand("SELECT * FROM [Stock_voorlopig$]", dbConnection))
    using (var da = new OleDbDataAdapter(dbCommand))
    {
        da.Fill(ds, "Stock");
    }
    
    var joined = from rType in ds.Tables["HWTypes"].AsEnumerable()
                 join rStock in ds.Tables["Stock"].AsEnumerable()
                 on rType.Field<string>("ProductID") equals rStock.Field<string>("Partno")
                 select new
                 {
                     ProductID = rType.Field<string>("ProductID")
                     // add the other columns you need here
                 };
    
    
    GridView1.DataSource = joined;
    GridView1.DataBind();
    

    【讨论】:

    • 嗨蒂姆,我还有一个问题要问你。它与上面的内容相同,但现在我想在 dropdownlist.DataTextField = "FullName" 中显示两列,一列来自“Sheet1”,另一列来自“Stock_voorlopig$”。 (例如:选择 ProductID +' - ' + Name +' - ' 作为 HWTypeFullName),我该怎么做?
    • @IForti:只需选择我用// add the other columns you need here 注释了我的代码的这些字段。然后,您可以将匿名类型用作 DropDownList 的数据源,并根据匿名类型中的属性名称(如上面的 ProductID)设置 DataTextFieldDataValueField
    • 再次感谢您的帮助。还有一个问题。您知道如何将上面的 Linq 查询结果添加到数据表或数据集中,以便我可以查询数据表或数据集吗?
    • @IForti:我不明白这个问题。当你想从数据库中查询它时,为什么你需要加入一些东西?或者你想以某种方式从上面的结果更新数据库?也许你需要问另一个问题,因为在 cmets 中很难回答。
    • 嗨,蒂姆,感谢您的帮助。我会把它放在上面的问题中。
    猜你喜欢
    • 2012-12-29
    • 1970-01-01
    • 2010-12-05
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多