如何通过TableAdapter.Update()更新从Datagrid到DB的所有更改

时间:2016-05-22 03:09:27

标签: c# datagrid dataset tableadapter

我使用的是32位版本的Visual Studio 2015 Enterprise。

首先,在我的项目中,我创建了一个基于服务器的数据库,并将其命名为HR.mdf,所以我使用的是LocalDB,我猜,顺便说一句,我将复制到输出字典属性为如果更新则复制。在这个数据库中,我只有一个简单的表定义为:

BitmapImage

其次,我创建了一个名为HR的 DataSet 项,我将承包商表拖到设计面板中:

enter image description here

和VS 2015自动生成三个C#类: HR (它是一个强类型的DataSet,有三个内部类,包括强类型DataTable contractorDataTable ,ant so on。), contractorTableAdapter TableAdapterManager

所以现在我的解决方案如下:

enter image description here

第三,然后我将承包商的Datagrid从数据源标签拖到我的WPF主窗口中:

enter image description here

运行程序时,主窗口如下所示:

enter image description here

我在MainWindow背后的C#代码是:

CREATE TABLE [dbo].[contractor] (
    [Id]        INT          IDENTITY (1, 1) NOT NULL,
    [Name]      VARCHAR (50) NOT NULL,
    [IsMarried] BIT          NOT NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

当我点击提交按钮时,我所期望的是,我在该网格中所做的所有更改都会更新到数据库,例如编辑记录和插入新记录。但实际上,点击后没有任何反应。

我在MSDN上发现了这个教程:https://msdn.microsoft.com/en-us/library/ms171933(v=vs.140).aspx,但是我没有在MainWindow类的任何对象上找到Validate()或EndEdit()。

我在HR.design.cs中为Update()方法添加了一个断点,该方法由VS 2015生成:

using System;
using System.Windows;

namespace DataSetLab
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private DataSetLab.HR hR;
        private DataSetLab.HRTableAdapters.contractorTableAdapter hRcontractorTableAdapter;
        private System.Windows.Data.CollectionViewSource contractorViewSource;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

            hR = ((DataSetLab.HR)(this.FindResource("hR")));
            // Load data into the table contractor. You can modify this code as needed.
            hRcontractorTableAdapter = new DataSetLab.HRTableAdapters.contractorTableAdapter();
            hRcontractorTableAdapter.Fill(hR.contractor);
            contractorViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("contractorViewSource")));
            contractorViewSource.View.MoveCurrentToFirst();
        }

        private void click(object sender, RoutedEventArgs e)
        {
            try
            {

                hRcontractorTableAdapter.Update(hR.contractor);
            }
            catch(Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                hRcontractorTableAdapter.Fill(hR.contractor);
            }
        }
    }
}

但是从未达到这一点。

感谢任何帮助,提前谢谢。谷歌搜索了很多,没有找到任何人这样做。

1 个答案:

答案 0 :(得分:0)

@dotNet是对的。原因是.mdf被覆盖了,我的设置是“复制到输出字典”#39;由于你需要重新启动Visual Studio 2015,所以属性不起作用。我意识到这最终不是一个好问题,我为此感到遗憾,虽然我找不到关闭它的方法,但是,所以我在这里发了一个答案。