c# DataSet.Tables [0] .GetChanges ();总是返回所有行

本文关键字:返回 Tables DataSet GetChanges | 更新日期: 2023-09-27 18:09:07

我将DataGridViewtext file绑定到C# WinForms,如下所示

onPageLoad

DataTable table = new DataTable();
            table.Columns.Add(Column0);
            table.Columns.Add(Column1);
            table.Columns.Add(Column2);
            table.Columns.Add(Column3);
            using (StreamReader sr = new StreamReader(Environment.CurrentDirectory + @"/data.txt"))
            {
                while (!sr.EndOfStream)
                {
                    string[] parts = sr.ReadLine().Split(',');
                    DeviceIDCounter = DeviceIDCounter + 1;
                    table.Rows.Add(DeviceIDCounter, parts[0], parts[1], parts[2]);
                }
            }
            dataSet = new DataSet();
            dataSet.Clear();
            dataSet.Tables.Add(table);
            dataGridView1.DataSource = dataSet.Tables[0];
            dataGridView1.AllowUserToAddRows = false;
            dataGridView1.Columns[0].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dataGridView1.Columns[1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dataGridView1.Columns[2].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            dataGridView1.Columns[3].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            DeviceIDCounter = 0;

现在在dataGridView1中更新单行时,它总是返回所有行

onButtonClick更新行后

DataTable dtRecordsUpdated = dataSet.Tables[0].GetChanges(); //always returning total rows
if (dtRecordsUpdated != null && dtRecordsUpdated.Rows.Count > 0)
{
   Cursor.Current = Cursors.WaitCursor;
   Cursor.Current = Cursors.Default;
}
else
{}

另一方面,我的另一个函数,即从SQLServer绑定DataGridView,正按预期工作。

谢谢

c# DataSet.Tables [0] .GetChanges ();总是返回所有行

你需要更新到DGV的数据源后,你做了一些改变,像这样:

 ((System.Data.DataTable)this.dataGridView1.DataSource).AcceptChanges();

数据表。GetChanges方法:获取数据表的副本,其中包含自加载或上次调用AcceptChanges以来对它所做的所有更改。

  • 如果您需要捕获已更改的内容,您需要AcceptChanges
  • 你得到所有的行,因为dataTable认为所有的行都有New。因为你从不接受更改
  • PS:没有必要创建数据集,如果你只是传递数据表给DataGridView