いくつかの投稿を検索しましたが、それでも機能しません。
C#で記述されたウィンドウアプリケーションがあります。ここで、datagridviewをデータベースにバインドします。
public static DataSet GetDataSet(string sql)
{
using (SqlConnection cn = new SqlConnection(constr))
{
SqlDataAdapter da = new SqlDataAdapter(sql, cn);
DataSet ds = new DataSet();
da.Fill(ds);
return ds;
}
}
そして、datagridviewを別のクラスにバインドします。
string sql = "select Amount, Price, Description from myTable";
ds = DbHelper.GetDataSet(sql);
dataGridView2.DataSource = ds.Tables[0];
ユーザーがdatagridviewを編集した後、データベースを更新するためのボタンを作成しました。
string sql = "select Amount, Price, Description from myTable";
DbHelper.UpdateDataSet(sql, ds);
MessageBox.Show("done");
public static void UpdateDataSet(string sql, DataSet ds)
{
using (SqlConnection cn = new SqlConnection(constr))
{
SqlDataAdapter da = new SqlDataAdapter(sql, cn);
da.Update(ds);
}
}
これがエラーで、次の行で発生しますda.Update(ds);
:
更新には、変更された行を含むDataRowコレクションが渡されたときに有効なUpdateCommandが必要です。
手伝ってくれてありがとう。
編集 私はこれで動作させることができます:
SqlCommandBuilder commandBuilder = new SqlCommandBuilder(da);
da.UpdateCommand = commandBuilder.GetUpdateCommand();
ただし、datagridviewにもキーを表示する場合のみ、それ以外の場合は次のようになります。
UpdateCommandの動的SQL生成は、キー列情報を返さないSelectCommandに対してはサポートされていません。
datagridviewにキーを表示したくない場合、これを克服するにはどうすればよいですか?