0

このような問題を解決していただけませんか: datagridview と SQL データベースの 2 つのフォームがあります。最初のフォームのロード イベントで、ストアド プロシージャ (選択クエリ) を使用して SQL データベースからデータを選択しています。

SqlConnection con = new SqlConnection(constr);
SqlCommand cmd = new SqlCommand("PROC001", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
da.Fill(dt);
datagridview.DataSource = dt;

その後、dt.DefaultView.Filter = .... を使用して datagridview をフィルタリングまたはソートし、フィルタリングされた行のみをグリッドに表示できます。CellMouseDoubleClick イベントで、2 番目の Form2 が表示されます。このフォームでは、Button1 をクリックしてデータベースの値を更新し、その後、選択した datagridview 行を更新したいと考えています。私の質問は次のとおりです。

1) datagridview で選択した行のみを更新し、すべての datagridview の塗りつぶしに対してストアド プロシージャを再度実行しないようにするにはどうすればよいですか。

2) データグリッドビューは既にフィルター処理されているため、手順を再度実行すると、フィルターが消えてしまいます。どうすればこれを回避できますか?

3) Form2 で、選択したフィールドとして「選択クエリ」に含まれていないデータベース値を更新していますが、この値はこのクエリに影響します。例:

SELECT Name, SecondName FROM tUsers 
  WHERE id = (SELECT DISTINCT id FROM tProcedures WHERE Code = 'First')

私のデータグリッドビューでは Name と SecondName を確認できますが、Form2 ではtProceduresデータベース テーブルのコードを更新しています。したがって、更新後、選択した行と現在のフィルターのみで、datagridview に新しいデータを表示したいと考えています。すべてのデータを datagridview に再度 SELECT したくないので、フィルターを壊しました。

単一の行を更新することは可能ですか? いくつか例を挙げていただけますか?

4

1 に答える 1

0

DataGridView は DataBinding を使用しているため、基になるデータ ソース (この場合は DataTable) を更新する必要があります。その方法については、「方法: DataTable の行を編集する」を参照してください。

フィルターの問題については、フィルターを保存して復元する必要があります。

var filter = dt.DefaultView.RowFilter;
UpdateData();
dt.DefaultView.RowFilter = filter;
于 2012-06-22T15:46:58.490 に答える