2011-10-20 14 views
1

複数のチェックボックスを持つデータグリッドビューがあります。 Finishedチェックボックスをオンにすると、特定のテーブルを更新するためにlinqコードを実行する必要があります。その特定のチェックボックスが汚れているかどうか、そしてテーブルに渡す必要がある値を渡すためのコードをどこに書くのかを知るにはどうすればいいですか? datagridviewが基づいているのと同じテーブルではないことに注意してください。特定のチェックボックスが選択された後にコードを実行するには

ありがとうございました。

EDITは:

private void propertyInformationDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)propertyInformationDataGridView.Rows[e.RowIndex].Cells[3]; 

     DataGridViewRow row = propertyInformationDataGridView.Rows[e.RowIndex] as DataGridViewRow; 

     System.Data.DataRowView SelectedRowView; 
     newCityCollectionDataSet.PropertyInformationRow SelectedRow; 

     SelectedRowView = (System.Data.DataRowView)propertyInformationBindingSource.Current; 
     SelectedRow = (newCityCollectionDataSet.PropertyInformationRow)SelectedRowView.Row; 

     if (Convert.ToBoolean(checkCell.EditedFormattedValue) == true) 
     { 
      DataClasses1DataContext dc = new DataClasses1DataContext(); 

      var matchedCaseNumber = (from c in dc.GetTable<PropertyInformation>() 
            where c.CaseNumberKey == SelectedRow.CaseNumberKey 
            select c).SingleOrDefault(); 

      reportsSent newReport = new reportsSent(); 
      newReport.CaseNumberKey = SelectedRow.CaseNumberKey; 
      dc.reportsSents.InsertOnSubmit(newReport); 
      dc.SubmitChanges(); 

     } 
    } 

は、私はいくつかの点でendeditする必要がありますかの問題ということですか?

+2

だから、正しい各行の "完成" のチェックボックスがありますか? – KreepN

+0

あなたがコードについてのさらなる助けを必要としているかどうかを教えてください。私は終日ご利用いただけます。 – KreepN

答えて

1

で行うことができます、あなたがする必要があるすべてはあなたのDataGridViewのための「CellContentClick」イベントを作成することです。

これを行う最も簡単な方法は、Datagridviewを選択し、プロパティに移動し、稲妻をクリックします。 「CellContentClick」までスクロールし、空のボックスをダブルクリックします。これにより、次のコードを貼り付けるために必要なメソッドが自動的に生成されます。

"CustomersDataGridView"のインスタンスの名前を自分の名前に変更してください。intellisenseは、置き換える必要のある無効なコードを赤で強調表示する必要があります。

また、checkCell宣言に表示される "9"は、 "Finished"チェックボックスのインデックスに変更する必要があります。左から3番目のセルにある場合は、9の代わりに2を入れます。インデックスは0に基づいています。コメントを修正する

EDITTED:

private void CustomersDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 

    if (e.ColumnIndex.ToString() == "9") 
    { 
     DataGridViewCheckBoxCell checkCell = (DataGridViewCheckBoxCell)CustomersDataGridView.Rows[e.RowIndex].Cells[9]; 
     DataGridViewRow row = CustomersDataGridView.Rows[e.RowIndex] as DataGridViewRow; 

     if (Convert.ToBoolean(checkCell.EditedFormattedValue) && CustomersDataGridView.IsCurrentCellDirty) 
     { 
      //Do Work here. 
      var z = row.Cells[0].Value; // Fill in the brackets with the column you want to fetch values from 
      //z in this case would be the value of whatever was in the first cell in the row of the checkbox I clicked 
     } 
    } 
} 
+0

ありがとう@KreepN。私はif(checkcell = -1)を使うことができると推測しています。私はブール型ではなくint型のものを定義していましたが、trueの場合は-1、falseの場合は0を使用します。 – korrowan

+0

正直なところ、Convert.ToBooleanのため、私は**チェックボックスがチェックされているかどうかを確認する際に問題なしで自分のコードを使用できなければならないと思っています。それがチェックされている場合。それがうまくいかない場合は、適切なif(checkcell = -1)またはif(checkcell.toString()== -1)メソッドを使用してください。 – KreepN

+0

私はあなたのコードを少しクリーナーとして使用します。一番最後の質問です。これは、チェックボックスが変更されたときにのみ実行されます。私は、クライアントにレポートを送るテーブルに値をドロップするので、レポートを一度だけ取得することが重要であることを確信したいと思います。 – korrowan

1

あなたはそれがCheckedChangedイベントこれは私のコードの一部からです

private void checkBox1_CheckedChanged(object sender, EventArgs e) 
{ 
    // Do what you have to do... 
} 
+2

イベントをメソッドに接続する方法の例を含めることができます。私は彼がすでにそれをやる方法を知っているかどうか尋ねることはないだろう。 – JSWork

+1

@JsWOrkそれはまさに私が理解する必要があることです=)。 – korrowan

+0

イベントをチェックボックスに接続する方法は2通りあります。 1)デザイナーのVisual Studioで、チェックボックスをクリックし、プロパティウィンドウをイベントタブに切り替え、CheckedChangedエントリを検索し、イベントハンドラの名前を入力します。 enterを押すと、Visual Studioはイベントメソッドを示すコードページに切り替わります。 2)チェックボックスを持つウィンドウのコンストラクタに移動します。 "InitializeComponents();"の後ろに次の行を挿入してください: "checkBox.CheckedChanged + = checkBox1_CheckedChanged;"上記のコードフラグメントをコンストラクタの後に追加します。 – Fischermaen

関連する問題