2011-07-19 37 views
0

私の最後の質問は閉鎖されたので、私は本当にこのために助けが必要なので、私はOLEDB接続でのVisual Studio 2010を使用していのDataGridViewエディット・セルは

私は...もう一度試してみます。今私は窓のフォームを開発しています。私はdatagridviewは編集/追加/削除モードを持つことができるので、使用したいと思っています。

私がしたいことは、自分のデータベースを編集するためにcellcontentchangedイベントを使用することです。内容を変更して離れると、このセルを編集するかどうか尋ねられます。私が「はい」と答えた場合、そのセルは変更されます。

ReadOnly = falseenabled = trueとしました。このような

adapter.Update(dataset); 

か何か:前に、私が読んだものから、私はちょうどこのような何かをするだろう。しかし、これは私のdatabseの変更を保存しません。プログラム的に編集する方法もわかりません。私はまた、私はOLEDBの更新コマンドを持っているかどうかわからない。何かが明確でない場合は、返信してください。私は明確にすることがうれしいです。ありがとうございました!

編集:ごめんなさい、まだ分かりません!これは、すべての関連するコードです:ここ
が、これはまだ多くありませんが、うまくいけば、あなたは私が再び

編集をやろうとしているかを確認しようとすることができます

private void dgv_DataLookup_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
    { 

     DialogResult dr; 
     dr = MessageBox.Show("Are you sure you want to edit this field?", "Edit Cell", MessageBoxButtons.YesNo); 

     if (dr == DialogResult.Yes) 
     { 
      //update the table in my database 
     } 
    } 

...いくつかのコードですこの部分(これは編集したいDataGridviewを表示するコードです)

OleDbConnection cs; 
    OleDbDataAdapter da = new OleDbDataAdapter(); 

    DataSet dsB = new DataSet(); 



    //If clicked search button 
     else if (combo_View.Text == "Orders") 
     { 

      da.SelectCommand = new OleDbCommand("SELECT * FROM TestQuery WHERE (VendorName = @VendorName OR @VendorName = '') AND (CustomerName = @CustomerName OR @CustomerName = '') AND ((@From IS NULL AND @To IS NULL) OR orderDate BETWEEN @From AND @To) AND (ItemNum = @ItemNum OR @ItemNum = '') AND (PO = @PO OR @PO = '') ORDER BY CustomerName", cs); 

      da.SelectCommand.Parameters.Add("@VendorName", OleDbType.VarChar).Value = combo_VendorView.Text.ToString(); 
      da.SelectCommand.Parameters.Add("@CustomerName", OleDbType.VarChar).Value = combo_CustomerView.Text.ToString(); 

      if (!chk_viewAllDates.Checked) 
      { 
       da.SelectCommand.Parameters.Add("@From", OleDbType.Date).Value = "#" + tp_viewFrom.Value.Date.ToString("M/d/yyyy") + "#"; 
       da.SelectCommand.Parameters.Add("@To", OleDbType.Date).Value = "#" + tp_viewTo.Value.Date.ToString("M/d/yyyy") + "#"; 
      } 

      else 
      { 
       da.SelectCommand.Parameters.Add("@From", OleDbType.Date).Value = DBNull.Value; 
       da.SelectCommand.Parameters.Add("@To", OleDbType.Date).Value = DBNull.Value; 
      } 

      da.SelectCommand.Parameters.Add("@PO", OleDbType.VarChar).Value = txt_POLookup.Text.ToString(); 
      da.SelectCommand.Parameters.Add("@ItemNum", OleDbType.VarChar).Value = combo_ItemNumLookup.Text.ToString(); 

      dsB.Clear(); 
      da.Fill(dsB); 
      dgv_DataLookup.DataSource = dsB.Tables[0]; 

     } 

もっとコードが必要な場合は教えてください。任意のヘルプは高く評価されています:)

+0

ここにいくつかのコードを追加 –

+0

@wilson - この質問はまだ理解しにくいです。 1)どのような環境で作業していますか?あなたはdatagridviewについて言及していますが、これはwinformsコントロールであり、asp.netについても言及しています。 2)あなたは何を達成する必要がありますか?あなたは、セルが変わるたびにデータを保存するように求めているようです。 3)あなたが必要とするものをより多くのアイデアを提供しようとしたコードを提供します。 –

+0

そして、あなたはコードが何を段階的に行っているのか見てきましたか? adapter.Update(dataset)を呼び出すと、実際にデータセットに変更がありますか? datagridviewを切り取り、データセットを直接更新するとどうなりますか? –

答えて

0

自分自身を修正しました。必要な値を取得するには、owningcolumn owningrowを使用してください。ありがとう

0

私はあなたがここでも尋ねているか分かりませんが、編集したデータをデータベースに保存する方法を尋ねていることを前提にしています。私はCellValueChangedイベントを使用しません。通常は、ユーザーがグリッド内のデータを編集し、保存ボタンをクリックするか、フォームの終了時にデータを保存させるだけです。

void Save() 
{ 
    OleDbConnection con=new OleDbConnection("Put your connect string here"); 
    OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM TestQuery", con); 
    OleDbCommandBuilder cb = new OleDbCommandBuilder(da); 
    DataTable tbl = dsB.Tables[0]; 
    da.Update(tbl); 
    tbl.AcceptChanges(); 
} 

接続のように既に作成したオブジェクトの一部を再利用したいと思うかもしれませんが、これが基本です。

+0

にアプローチ。私は自分のコードでこれを試してみましたが、動的SQL生成機能が複数の基本テーブルに対してサポートされていない場合、このエラーが発生しました。 –

+0

DataAdapter内のselectステートメントは、Where句を使用しない単純な選択であり、1つのテーブルからのみ選択する必要があります。言い換えれば、元のselect文またはオリジナルのDataAdapterを使用することはできません。 「SELECT * FROM TestQuery」を正確に使用していて、エラーが発生した場合、CommandBuilderはあまりにも愚かであり、手動でInsertおよびUpdateコマンドオブジェクトを作成する必要があります。それは非常に面倒です。 – beater

関連する問題