0

いくつかの投稿を検索しましたが、それでも機能しません。

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にキーを表示したくない場合、これを克服するにはどうすればよいですか?

4

1 に答える 1

0

SqlCommandBuilderは、フィールドを更新するために主キーを必要とします。キーをDataGridViewにロードすることはできますが、列を非表示にします。

于 2013-03-25T06:40:48.913 に答える