2

これが私の機能です:

    private void btnSave_Click(object sender, EventArgs e)
    {
        wO_FlangeMillBundlesTableAdapter.Update(invClerkDataDataSet.WO_FlangeMillBundles);
        wO_HeadMillBundlesTableAdapter.Update(invClerkDataDataSet.WO_HeadMillBundles);
        wO_WebMillBundlesTableAdapter.Update(invClerkDataDataSet.WO_WebMillBundles);
        int rowsaffected = wO_MillTableAdapter.Update(invClerkDataDataSet.WO_Mill);

        MessageBox.Show(invClerkDataDataSet.WO_Mill.Rows[0]["GasReading"].ToString());
        MessageBox.Show(rowsaffected.ToString());
    }

関数の 4 番目の更新では、残りの部分と同じ機能が使用されていることがわかります。デバッグ用のものがいくつか追加されているだけです。最初の 3 つのテーブルは DataGridViews にバインドされ、正常に動作します。4 番目のテーブルには、そのメンバーがさまざまなテキスト ボックスにバインドされています。

GasReading 列にバインドされたテキスト ボックスの値を変更して [保存] をクリックすると、実際には最初の MessageBox に新しい値が表示されるため、データセットに正しく作成されます。ただし、影響を受ける行は常に 0 を示しており、実際のデータベースの値は更新されていません。

誰でも私の問題を見ることができますか? 4 つの更新方法が同じであるため、コードの別の場所に問題があることは理解していますが、どこから始めればよいかわかりません。

ここに私のバインディングコードがあります:

        txtHours.DataBindings.Add("Text", invClerkDataDataSet.WO_Mill, "HoursRun");
        txtGasReading.DataBindings.Add("Text", invClerkDataDataSet.WO_Mill, "GasReading");
        txtDelayMins.DataBindings.Add("Text", invClerkDataDataSet.WO_Mill, "DelayMins");
        txtGapMins.DataBindings.Add("Text", invClerkDataDataSet.WO_Mill, "GapMins");

より複雑なバインド方法があることは理解していますが、バインドは問題ではありません。繰り返しますが、データはバインドされたテキストボックスからデータテーブルに作成されていますが、そこからデータベースには作成されていません。

4

1 に答える 1

3
  1. wO_MillDataSource.EndEdit()Adapter.Update() の前に呼び出すことをお勧めします。コントロールからすべての変更を取り込みます。

  2. 4 番目のテーブルと他のテーブルの 1 つの間に外部キー関係がある場合は、挿入/更新と削除アクションを分割するか、TableAdaptermanager を使用する必要があります。

于 2010-03-22T23:36:59.137 に答える