C#-数据绑定文本字段中的更改不会将数据行状态更改为“已修改”,保持不变-Windows窗体

C#-数据绑定文本字段中的更改不会将数据行状态更改为“已修改”,保持不变-Windows窗体,c#,data-binding,visual-studio-2015,ado.net,C#,Data Binding,Visual Studio 2015,Ado.net,我在使用dataAdapter更新数据源时遇到问题,因为它在DataTable中找不到修改过的dataRows。我有一个简单的表单,有两个文本字段和一个按钮。textfields被数据绑定到BindingSource,将数据加载到textfields的工作正常,当我修改textfield(比如我将firstname更改为其他名称)时,datarow行状态保持不变。我在网上做了很多搜索,但找不到解决办法。代码如下: 下面是如何将数据加载到文本字段中 private void frmReceiveO

我在使用dataAdapter更新数据源时遇到问题,因为它在DataTable中找不到修改过的dataRows。我有一个简单的表单,有两个文本字段和一个按钮。textfields被数据绑定到BindingSource,将数据加载到textfields的工作正常,当我修改textfield(比如我将firstname更改为其他名称)时,datarow行状态保持不变。我在网上做了很多搜索,但找不到解决办法。代码如下:

下面是如何将数据加载到文本字段中

private void frmReceiveOrders_Load(object sender, EventArgs e) {
        using (SqlConnection conn = DBManager.getOpenConnection()) {

            adp = new SqlDataAdapter("SELECT firstname, lastname from test", conn);
            adp.Fill(dtNames);
            adp.Dispose();

            b.DataSource = dtNames;

            txtFirst.DataBindings.Add("Text", b, "firstname");
            txtLast.DataBindings.Add("Text", b, "lastname");

        }
}
下面是我如何保存到数据源,但rw始终返回0行

private void button1_Click(object sender, EventArgs e) {
        using (SqlConnection conn = DBManager.getOpenConnection()) {
            SqlCommandBuilder bld = new SqlCommandBuilder(adp);
            int rw = adp.Update(dtNames);
            MessageBox.Show("rows affected " + rw.ToString());
        }
}

谢谢您的帮助。

如果(!page.isPostBack)是否加载frmReceiveOrders\u?如果每次加载页面时都调用,那么更改的值就不会出现John所说的情况。这似乎是asp.net。所以数据绑定不是双向的。这意味着更改的值不会自动写回数据源。您应该尝试从要将datatable绑定到的控件接收更改的值。很可能您需要在
dtNames
中包含PK字段(Id或其他内容)。这是一个WindowsForm应用程序。我有一个更复杂的项目,其中包含主键,结果相同,这就是为什么我创建了一个较小的演示来简化它。