C#DataSet.Tables [0] .GetChanges();始终返回所有行

时间:2015-08-21 07:38:48

标签: c# winforms datagridview

我在DataGridView C# WinForms绑定text file,如下所示

的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
{}

另一方面,来自DataGridView的另一个绑定SQLServer的函数正在按预期工作。

由于

2 个答案:

答案 0 :(得分:4)

在进行如下更改之后,您需要更新到DGV的DataSource:

.s-changes {
  color: red;
  font-style: italic;
  text-decoration: line-through;
  display: block;
}
.h-changes {
  color: #000000;
  font-style: normal;
  text-decoration: none;
  display: none;
}
.s-changes-new {
  color: #347C2C;
}
.h-changes-new {
  color: #000000;
  font-style: normal;
  text-decoration: none;
}

答案 1 :(得分:1)

DataTable.GetChanges方法:获取DataTable的副本,该副本包含自加载或上次调用AcceptChanges以来对其所做的所有更改。

  • 如果您需要捕捉已更改的内容,则需要接受AcceptChanges
  • 你得到了所有的行,因为dataTable认为所有行都有New.State,因为你永远不会接受变更
  • PS:如果您只是将DataTable传递给DataGridView,则无需创建DataSet