0

我刚开始学习C#,有点迷茫DataSet/DataTable/DataGridView。现在我有一个简单的表单,其中有DataGridView, listBox, Insert & Delete按钮。当我的表单加载到 listBox 中时,我得到了 excel 工作表的列表。然后我选择一张纸,然后它出现在DataGridView(我正在写的所有信息DataSetDataTable)上。我想在运行时添加或删除列。这是我的Delete按钮代码:

    excelConn = new OleDbConnection();
    excelConn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + excelFilePath + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
    DataTable dt = new DataTable();
    OleDbDataAdapter ExcelAdapt = new OleDbDataAdapter("Select * From " + "[" + tableName + "]", excelConn);
    ExcelAdapt.Fill(dt);
    try
    {
      dt.Columns.Remove(colName);
      dt.AcceptChanges();
      var bds = new BindingSource();
      bds.DataSource = dt;
      grid.DataSource = bds;

      MessageBox.Show("Column(s) deleted ");
      excelConn.Close();
      }

      catch (Exception ex)
      {
         MessageBox.Show(ex.Message);
      }

我面临的问题是我无法保存在运行时所做的更改,即使在运行时这些更改也是临时的。如果在运行时我添加新列,然后我从ListBox这些更改中选择另一张表消失。

找到了本教程,但如果我理解得很好,它会更改数据库;好吧,在我的情况下,它会更改 excel 文件(但我想拥有原始的 excel 文件并仅在DataSetand中进行更改DataTable)。

我只能在DataSet/DataTable. 如果是,那么如何?

4

1 回答 1

0

这是您的问题的确切解决方案,它确实将数据从 DataGridView 更新到 Excel,我刚刚在我的机器上进行了测试,它确实有效:

http://blogs.msdn.com/b/spike/archive/2008/10/29/how-to-update-an-excel-worksheet-using-dataset-and-the-oledbdataadapter.aspx

[编辑]

例如,以下代码将从 DataGridView1 和 ds 的本地副本中删除第 3 行,但您的 EXCEL 不会受到影响。

dataGridView1.Rows.RemoveAt(2);
ds.Tables["[Sheet1$]"].Rows[2].Delete();

稍后当您想将此数据保存到其他 EXCEL 时,您可以只导出到新的 EXCEL 或相同的 EXCEL 不同的 [SheetX]。

于 2012-05-23T23:06:54.207 回答