2011-08-09 5 views
1

rowstateまだ変わりません。
すべてのWinFormsコントロールはのBindingSourceには、私がデータテーブルでデータソースを持っているのBindingSourceを持っているのDataTableを更新しますが、

をデータバインディングを追加しました私は、GUIでの値の変更を行います(コントロールの.textのプロパティへの書き込み)

[保存上の私は

bsSending.EndEdit();  
を次のようにします

((DataRowView)this.bsSending.Current).Row)には新しい値が入りますが、RowStateは変更されません。どのようにこれを可能にすることができますか?

がなぜ分からないのですが、特定の行のEndEditを呼び出すと、トリックをしているようです:私はGUI

+1

更新プログラムを回答として投稿し、それを受け入れられた回答としてマークしてください。 – cadrell0

答えて

2

UPDATEの値の変更を行う前に、私はAcceptChanges()への呼び出しを持っていません。行の親はデータテーブルであり、テーブルのデータセットはbsSendingデータソースのデータソースです。 bsSending.EndEdit()を呼び出すと値が更新されるだけで、行状態は更新されません。

データを結合する前にデータセットでAcceptChanges()を呼び出すと、このエラーが発生する可能性があることを示しています(データセットは更新されますが、rowstateは変更されません)。でも、私は、問題への解決策を見ていないので、私ははい、私は同じ経験を持っている

0

私の回避策ソリューションを保ちます。私はVisual Studio 2010と.NET Framework v.4.0を使用しています。私はDataTableにバインドされているDataGridViewコントロールで作業しています。

ユーザーがセルの値が編集モードにまだある間、フォームを閉じようとした場合、私は、DataGridが編集モードを終了し、彼は変更を保存するか、失うことを望んでいるかどうかをユーザーにお願いしたいと思います。 - EndEdit()、それは編集を終了させるためにDataGridViewの上

if (dgv.IsCurrentCellInEditMode) 
{ 
       dgv.EndEdit(); 
       updatedData.Rows[dgv.CurrentCell.RowIndex].EndEdit(); 
} 
      if (updatedData.GetChanges() != null && updatedData.GetChanges().Rows.Count > 0) 
{ 
    // if there are changes, update the dataset 
} 

私は両方を呼び出すために必要なことを指摘したい:

これは私のために動作するコードです。次に、DataTableでEndEdit()を呼び出して、 'modified'という行をマークします。

0

私は同様の問題を持っています。最初のタブページにグリッドがあり、2番目のタブページにテキストボックスがあり、すべて同じバインディングソースにバインドされています。 グリッドでコンテンツが変更されますが、行の開始は変更されません。

私のコードはでした:

DataRow dataRow = ((DataRowView)bindingSource1.Current).Row; 
if(dataRow.RowState != DataRowState.Modified) 

私は修正rowStateを持つことが期待しました。

不足しているコードは:

bindingSource1.EndEdit(); 
ここ

全体のソリューション:

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (tabControl1.SelectedIndex == 0) 
    { 
     bindingSource1.EndEdit(); 
     DataRow dataRow = ((DataRowView)bindingSource1.Current).Row; 
     if(dataRow.RowState != DataRowState.Modified) 
     { 
      return; 
     } 
     DialogResult userOption = MessageBox.Show("Save?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
     if (userOption == System.Windows.Forms.DialogResult.Yes) 
     { 
      Save(); 
     } 
    } 
} 

私のソリューション:私は1つの形に似たような状況に遭遇してきたと私はその問題が気づいた

1

バインディングでラベルにヒントToolTipのプロパティ。まず、私はいくつかの文字列にヌルからヌルため値を変更したときに、問題が消えていること、実現が、プロジェクトに行われた他のいくつかの変更をした後、問題が再び登場しました。 ツールチップのプロパティへのバインドを削除すると、問題は再び消えました。それでも私はいつまでも知りません。

0

行の変更をプログラムでコミットするには、フォームのValidateメソッドを呼び出します。データソースがBindingSourceの場合は、callBindingSource.EndEditを呼び出すこともできます。

私はそれが古いポストを知っている IsCurrentRowDirty

0

を参照してください。 DataRowView.EndEditを直接呼び出すことで解決できますが、私の場合は正確な理由がわかりました:

誤って、1つのコントロールの2つのプロパティを異なる列にバインドしました。 (私の場合は、Devexpress 'TextEditコントロール - EditValueTextのプロパティを同時にアンダーレイテーブルの異なる列にバインドしました)。

多分、2016+でも誰かを助けるでしょう。なぜなら、それは厄介なバグだったからです。

関連する問題