私はVisual Studio 2015 Enterprise、32ビット版を使用しています。TableAdapter.Update()を通じてDatagridからDBへのすべての変更を更新する方法
まず第一に、私のプロジェクトで、私は私が推測サーバーベースのデータベースを作成し、HR.mdfそれを名付け、私はLocalDBを使用しています、ところで、私はに出力辞書プロパティにそのコピーを設定します新しいの場合はコピーしてください。このデータベースでは、私は一つだけの単純な表のように定義されている。第二に、私はHRという名前のDataSetアイテムを作成し
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)
);
、私は、デザインパネルに発注テーブルをドラッグ:
VS2015は自動的に3つのC#クラスを生成します。HR(厳密に型指定されたデータセットであり、厳密に型指定されたDataTable contractorDataTable、ant so。)、contractorTableAdapterおよびTableAdapterManager。
だから今、私の解決策は、次のようになります。第三に、私はその後、私のWPFのメインウィンドウにデータソースタブから契約者のデータグリッドをドラッグ
:
をプログラムを実行すると、メインウィンドウは次のようになります。
そして、メインウィンドウの背後にある私のC#のコードです:私が期待したもの
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);
}
}
}
}
は、私は、送信ボタンをクリックしたとき、私はそのグリッド内のすべての変更がデータベースに更新されている、このような編集レコードを挿入して新しいレコードを挿入します。しかし、実際には、クリックしても何も起こりませんでした。
このチュートリアルはMSDN:https://msdn.microsoft.com/en-us/library/ms171933(v=vs.140).aspxですが、MainWindowクラスのオブジェクトでValidate()またはEndEdit()が見つかりませんでした。
私はVS 2015で生成されHR.design.csで()メソッド、更新にブレークポイントを追加しました:
public partial class contractorTableAdapter : global::System.ComponentModel.Component {
//...
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "4.0.0.0")]
[global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.TableAdapter")]
public virtual int Update(HR.contractorDataTable dataTable) {
return this.Adapter.Update(dataTable);
}
//...
}
をしかし、この点に到達されていませんでした。
ご協力いただきありがとうございます。グーグル・グーグルでは、このように誰かを見つけることはありません。
このメソッドは 'DebuggerNonUserCodeAttribute'でマークされているため、このブレークポイントはヒットしません。代わりにクリックイベントの 'Update()'呼び出しにブレークポイントを置きます。私の疑惑は、プロジェクトを実行するたびにあなたのMDFが上書きされることです。 – dotNET
私はあなたが知っていることを知っている、私は/ bin/debugで、生成された.exeを実行する場合は、そのパスの下にある.mdfのコピーにデータを保存し、ルートディレクトリの下のコピーによって上書きされるようですプロジェクトの。 – VincentZHANG
MSDNによると、 'Copy to Output dictionary'を 'Copy always'以外のオプションに変更すると、この問題が解決されます。 – VincentZHANG