【问题标题】:How to Update data in the dataGridview ONLY如何仅更新 dataGridview 中的数据
【发布时间】:2014-07-01 23:46:20
【问题描述】:

我的应用程序将仅包含标题列名称的 Excel 文件中的工作表导入到新的 dataGridView 表中。为了简单起见,让我们说列名是;姓名,城市,州,状态。我将前两个条目“硬编码”为 Jack、Detroit、MI、Missing;和迈克,芝加哥,伊利诺伊州,失踪。接下来我导入一个添加更多条目的 XML 文件。我有寻找原始 2 个条目的代码,如果找到,我希望它“更新”或“重新编辑”丢失的内容。 (我希望这仅发生在 dataGridView 表中。我找到的 sql 示例都旨在更新原始数据库。我希望它只更新 dataGridView 表。

此代码旨在更新 excel 文件。

sql = "UPDATE " + myNameRange + " SET " + mySET + "' WHERE " + myWHERE + "'";

有没有一种方法可以让我只更改 dataGridView 中的数据?

从excel导入表格的方法

public static void loadData(string SheetName, DataGridView MyDataGrid, string filePathMain)
{
    string pathCon = "Provider=Microsoft.Ace.OLEDB.12.0; Data Source=" + filePathMain + ";Extended Properties=\"Excel 8.0; HDR=YES;IMEX=3;READONLY=FALSE\";";
    OleDbConnection conn = new OleDbConnection(pathCon);
    OleDbCommand cmd = new OleDbCommand("select * from [" + SheetName + "]", conn);
    conn.Open();
    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(cmd);
    DataTable dt = new DataTable();
    myDataAdapter.Fill(dt);
    //MessageBox.Show( dt.Rows.Count.ToString());
    MyDataGrid.Tag = dt.Rows.Count.ToString();
    MyDataGrid.DataSource = dt;
    OleDbCommand updateCmd = new OleDbCommand("UPDATE [" + SheetName + "]");
    myDataAdapter.UpdateCommand = updateCmd;
    conn.Close();
}

在这里,我将数据硬编码到表格中。这行得通。

DataTable dt = ((DataGridView)TC).DataSource as DataTable;


DataRow row0 = dt.NewRow();
row0["Name"] = "Jack";
row0["Status"] = "MISSING";
dt.Rows.Add(row0);

DataRow row1 = dt.NewRow();
row1["Name"] = "Mike";
row1["Status"] = "MISSING";
dt.Rows.Add(row1);

【问题讨论】:

  • 在 excel 表中有没有可以使用的键?
  • 我对编程很陌生。 Key 是否引用了一行?在excel中它只是列标题,没有别的。必须是这样。

标签: c# datagridview


【解决方案1】:

dgvThing.DataSource 将为您提供绑定到您的DataGridView 的数据,您可以在不修改原始数据源(即 excel 文件)的情况下对其进行最小化。

编辑:在这种情况下,您将遍历行以找到您的人并像这样更新他们的状态。

DataTable dt = ((DataGridView)TC).DataSource as DataTable;
foreach (DataRow row in dt.Rows)
{
    if (row["Name"].Equals("Jack"))
        row["Status"] = "Found";
}

【讨论】:

  • DataSource 将返回您原来保存的任何内容。因此,如果您将 excel 数据保存为数组,它将以数组的形式出现,但您必须对其进行强制转换才能使用它。前任。 ((string[])dgvThing.DataSource)[1] = "Stuff".
  • [1] 是否引用了第二行?假设 [0] 将是第一行?我需要通过名字引用将 Missing 更改为 Found ... 在我的代码中,我说如果名字 == 为 Mike,那么我需要上到 Mike 所在的位置并将 Missing 更改为 Found .
  • 是的,[1] 正在引用第二行数据。为了更新,我需要知道您的数据最初是如何存储到DataGridView 中的。自定义类?细绳? OLEDB?因为这将极大地改变您访问Missing 的第四列以更改值的方式。
  • 我在顶部添加了更多信息。我正在展示如何将数据从 excel 工作表加载到我的 dataGridView 中的代码。
  • 更新工作表后,只需再次调用例程将其绑定到 dgv。
猜你喜欢
  • 2015-05-20
  • 1970-01-01
  • 2021-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
相关资源
最近更新 更多