2016-05-22 20 views
0

私は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) 
); 

、私は、デザインパネルに発注テーブルをドラッグ:

enter image description here

VS2015は自動的に3つのC#クラスを生成します。HR(厳密に型指定されたデータセットであり、厳密に型指定されたDataTable contractorDataTable、ant so。)、contractorTableAdapterおよびTableAdapterManager

だから今、私の解決策は、次のようになります。第三に、私はその後、私のWPFのメインウィンドウにデータソースタブから契約者のデータグリッドをドラッグ

enter image description here

enter image description here

をプログラムを実行すると、メインウィンドウは次のようになります。

enter image description here

そして、メインウィンドウの背後にある私の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); 
    } 
    //... 
} 

をしかし、この点に到達されていませんでした。

ご協力いただきありがとうございます。グーグル・グーグルでは、このように誰かを見つけることはありません。

+0

このメソッドは 'DebuggerNonUserCodeAttribute'でマークされているため、このブレークポイントはヒットしません。代わりにクリックイベントの 'Update()'呼び出しにブレークポイントを置きます。私の疑惑は、プロジェクトを実行するたびにあなたのMDFが上書きされることです。 – dotNET

+0

私はあなたが知っていることを知っている、私は/ bin/debugで、生成された.exeを実行する場合は、そのパスの下にある.mdfのコピーにデータを保存し、ルートディレクトリの下のコピーによって上書きされるようですプロジェクトの。 – VincentZHANG

+0

MSDNによると、 'Copy to Output dictionary'を 'Copy always'以外のオプションに変更すると、この問題が解決されます。 – VincentZHANG

答えて

0

@dotNetが正しくありました。理由は.mdfが上書きされていて、Visual Studio 2015を再起動する必要があるため、「出力辞書にコピーする」プロパティが機能しませんでした。これは最終的には良い質問ではないことに気付きました。それについては、私はそれを閉じる方法を見つけませんでしたので、私はここに答えを投稿します。

関連する問題