- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的程序显示一个带有一些数据的简单数据 GridView :
用户(我)可以更改数据(注意第一行):
当我查看程序中的数据源时,我可以看到更改后的值:
但是,DataRowState 是 Added
而不是 Modified
。怎么会这样?数据显然发生了变化,但 DataRowState 并未反射(reflect)这一点:
对于我的生活,我无法弄清楚为什么 DataRowState 在数据源中的每一行上显示 Added
。以下是我的程序的完整列表:
using System;
using System.Collections.Generic;
using System.Data;
using System.Windows.Forms;
namespace DataBindingTest
{
using System.ComponentModel;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// Create some people and a list to hold them.
var personA = new Person { Name = "Kevin", Address = "140 Holiday Drive" };
var personB = new Person { Name = "Donna", Address = "123 Somestreet" };
var personC = new Person { Name = "Mark", Address = "145 Uptown Blvd" };
var personD = new Person { Name = "Bryce", Address = "504 Greymere Road" };
var personE = new Person { Name = "Parzival", Address = "99A Housing Brad St" };
var people = new List<Person> { personA, personB, personC, personD, personE };
//// Make a datatable to hold the people
var tblPeople = new DataTable();
tblPeople.Columns.Add("Name");
tblPeople.Columns.Add("Address");
foreach (var person in people)
{
tblPeople.Rows.Add(person.Name, person.Address);
}
// Set binding source to the table
bindingSource1 = new BindingSource();
bindingSource1.DataSource = tblPeople;
dataGridView1.DataSource = bindingSource1;
}
private void btnUpdate_Click(object sender, EventArgs e)
{
// Get only the changed rows
// (The line below is where the null reference error is occuring because rowstate never == Modified)
var changedRows = ((DataTable)bindingSource1.DataSource).GetChanges(DataRowState.Modified).Rows;
}
}
public class Person
{
public string Name { get; set; }
public string Address { get; set; }
}
}
最佳答案
当您在构造函数中添加行时,所有行的状态都是“已添加”。当你修改第一个的时候,还是Added,那是正常的。您只需要接受数据表中的更改,一切都在运行:
public Form1()
{
InitializeComponent();
// Create some people and a list to hold them.
var personA = new Person { Name = "Kevin", Address = "140 Holiday Drive" };
var personB = new Person { Name = "Donna", Address = "123 Somestreet" };
var personC = new Person { Name = "Mark", Address = "145 Uptown Blvd" };
var personD = new Person { Name = "Bryce", Address = "504 Greymere Road" };
var personE = new Person { Name = "Parzival", Address = "99A Housing Brad St" };
var people = new List<Person> { personA, personB, personC, personD, personE };
//// Make a datatable to hold the people
var tblPeople = new DataTable();
tblPeople.Columns.Add("Name");
tblPeople.Columns.Add("Address");
foreach (var person in people)
{
tblPeople.Rows.Add(person.Name, person.Address);
}
// this line sets the state of the added rows to 'unchanged',
// so when you modify one row it becomes'modified'
tblPeople.AcceptChanges();
// Set binding source to the table
bindingSource1 = new BindingSource();
bindingSource1.DataSource = tblPeople;
dataGridView1.DataSource = bindingSource1;
}
希望对你有帮助。
关于c# - 为什么当我对行进行更改时 DataRowState 显示已添加而不是已修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25066507/
我的程序显示一个带有一些数据的简单数据 GridView : 用户(我)可以更改数据(注意第一行): 当我查看程序中的数据源时,我可以看到更改后的值: 但是,DataRowState 是 Added
由于各种原因,我不得不将类型化数据集发送到 WCF 服务端点。这工作正常,除了在反序列化时,每个 DataTable 中每一行的 RowState 都设置为“已添加”,无论它们在客户端上是什么。如果我
假设如果两个相同的 DataTables 我错了吗?合并后每一行的状态会被保留吗? 看看这个简单的例子。它创建两个相同的表并合并 updated表带 original table 。但是返回的表在 o
在 VB.NET 中: DataTable.GetChanges(Not DataRowState.Deleted) C# 中的等价物是什么? 最佳答案 假设 Not 表示“按位补码”... Data
我是一名优秀的程序员,十分优秀!