1

フォームは次のとおりです。

ここに画像の説明を入力してください

その背後にあるコードは次のとおりです。

public partial class uxFormDatabase : Form 
{ 

BindingSource rawtableBindingSource = null; 

public uxFormDatabase(BindingSource myPassedSource)  
{ 
    InitializeComponent(); 
    rawtableBindingSource = myPassedSource; 

    uxDGVtable.AutoSize = true; 
    dataToDGV(); 
} 

public void dataToDGV() 
{ 
    uxrawdataBindingNavigator.BindingSource = this.rawtableBindingSource; 
    uxDGVtable.DataSource = this.rawtableBindingSource; 
} 

private void saveToolStripButton_Click(object sender, EventArgs e) 
{ 
    Validate(); 
    rawtableBindingSource.EndEdit(); 
} 

} 

私は、アクティブ化されると、親フォームからBindingSourceを渡すuxFormDatabaseメソッドが起動するという印象を受けました。public uxFormDatabase(BindingSource myPassedSource)

その場合、BindingNavigatorで保存ボタン「saveToolStripButton_Click」を押したときに、変更がデータベースに保存されないのはなぜですか?これらの2行は、変更をデータベースに保存しませんValidate();rawtableBindingSource.EndEdit();か?

アップデート

上記のフォームは、このフォームから読み込まれます。

namespace WindFormAppRevisionHelper
{

    public partial class uxRevisionHelperForm : Form
    {

        public SqlCeConnection conn = null;
        public SqlCeDataAdapter da = null;
        public DataSet ds = null;
        BindingSource definitionsBindingSource = new BindingSource();

    public uxRevisionHelperForm()
    {
        InitializeComponent();
        uxDescriptionTextBox.AutoSize = true;
        refreshBindingSource();
        assignControlsToSource();
    }

    public void refreshBindingSource()
    {            
        conn = new SqlCeConnection(ConfigurationManager.ConnectionStrings["WindFormAppRevisionHelper.Properties.Settings.DefinitionsDBConnectionString"].ConnectionString);
        da = new SqlCeDataAdapter(new SqlCeCommand("Select * From tb_RevisionDefinitions",conn));
        ds = new DataSet("Study Helper");
        ds.Tables.Add("DefinitionsTable");
        da.Fill(ds.Tables["DefinitionsTable"]);

        // Assign the BindingSource.
        definitionsBindingSource.DataSource = ds.Tables["DefinitionsTable"];
        uxBindingNavigator.BindingSource = this.definitionsBindingSource;

    }
    void assignControlsToSource() 
    {
        uxDescriptionTextBox.DataBindings.Add(new Binding("Text", definitionsBindingSource, "Description", true));
        uxWordPhraseTextBox.DataBindings.Add(new Binding("Text", definitionsBindingSource, "WordPhrase", true));
        uxReferenceTextBox.DataBindings.Add(new Binding("Text", definitionsBindingSource, "Reference", true));
    }

    private void uxUpdateDataButton_Click(object sender, EventArgs e)   
    {
        uxRevisionHelperGroupBox.Enabled = false;
        uxBindingNavigator.Hide();
        uxFormDatabase myNewDisplay = new uxFormDatabase(definitionsBindingSource);//<<<<this loads the _child_ form
        myNewDisplay.FormClosed += delegate { activateGroupBorder(); };
        myNewDisplay.Show();    
    }

    public void activateGroupBorder() 
    {
        uxRevisionHelperGroupBox.Enabled = true;
        uxBindingNavigator.Show();
    }
}
4

1 に答える 1

1

この例を見ると、バインディングソースの準備に使用されたSqlDataAdapterオブジェクトがデータベースの更新を担当していることがわかります。

uxFormDatabaseまた、のコンストラクターに渡して、SqlCeDataAdapter da内部のグローバルインスタンス変数に保存し、anduxFormDatabaseの後に、を呼び出すことができると思います。ValidateEndEditda.Update((DataTable)rawtableBindingSource.DataSource);

使用したコード:

    private void saveToolStripButton_Click(object sender, EventArgs e)
    {
        Validate();
        rawtableBindingSource.EndEdit();
        SqlCeCommandBuilder cmdBuilder = new SqlCeCommandBuilder(rawtableDA);
        rawtableDA.Update((DataTable)rawtableBindingSource.DataSource);
        cmdBuilder = null;
    }
于 2012-07-16T19:32:02.043 に答える