2009-08-27 17 views
7

これを解決するにはいくつかの助けが必要です。asp.net gridviewチェックボックスの選択

私は、GridViewコントロールを持っているし、GridViewの内側に私はチェックボックスがあり、チェックボックスをクリックした後、私はポストバックイベントをやって唯一のデータベースに、この特定の行を更新しようとしています。

これは私のgridviewチェックボックスのコードです。 OnCheckedChangedを参照してください。

<asp:TemplateField HeaderText="Sample"> 
    <ItemTemplate> 
    <asp:CheckBox runat="server" 
        ID="chkSample" 
        Checked='<%# Bind("Sample") %>' 
        OnCheckedChanged="UpdateSupplyLed" 
        AutoPostBack="True"> 
    </asp:CheckBox> 
    </ItemTemplate> 
</asp:TemplateField> 

コード:

protected void UpdateSupplyLed(object sender, EventArgs e) 
{ 
    foreach (GridViewRow di in SamplingGridView.Rows)  
    {   
     CheckBox chkBx = (CheckBox)di.FindControl("chkSample"); 
     if (chkBx != null && chkBx.Checked) 
     { 
      //update database logic here. 
     } 
    } 
} 

上記のコードは正常に動作しますが、それは私がちょうどチェックし1のirresepectiveにチェックされているすべてのチェックボックスを得ています。私はそれらのすべてを望んでいません。

は、どのように私はチェックされているだけで1行の値を取得することができます。レコードのステータスがtrueで、レコードを更新したくないため、行の一部がすでにチェックされている可能性があります。

私は私の質問が正しいと思います!

更新:答えは次のとおりです。

protected void UpdateSupplyLed(object sender, EventArgs e) 
{ 
    CheckBox chkSampleStatus = sender as CheckBox;   
    bool sample = chkSampleStatus.Checked;    
    GridViewRow row = chkSampleStatus.NamingContainer as GridViewRow;   
    TextBox txtId = row.FindControl("Id") as TextBox;    
    int id = Int32.Parse(txtId.Text); 
} 

答えて

7

はこのお試しください:

CheckBox chkBx = sender as CheckBox; 

をではなく、すべての行を反復します。

私はこの方法で自分自身でのGridViewのチェックボックスのを使用していません。通常、代わりにGridViewのOnRowCommandイベントを使用し、RowIndexまたはCommandArgument値を使用してデータベースを更新します。

CheckBoxのOnRowコマンドが難しい場合は、CheckboxのCheckChangedイベントを使用し、NamingContainerコントロールを使用してGridViewRowサーバーサイドに移動することをお勧めします。ような何か:

GridViewRow row = chkBx.NamingContainer as GridViewRow; 

私が行くのCheckBox =>セルを仮定している=>あなたには、いくつかのより多くの詳細を得るでしょう、あなたGoogleのASP.NETのNamingContainer場合行です。

+0

に動作していない上記の場合にも、これを試してみてくださいは、あなたの答えをいただき、ありがとうございます。しかし、同じ行から別の値が必要なので、その特定のgridview行の行IDを取得するにはどうすればよいですか。私はレコードのIDを得ることができるように。 – Supremestar

+0

は、それから私は、チェックボックスのOnCheckChangedは、GridViewsを使用OnRowCommand代わりに、行がGridVieweCommandEventArgsに私はGridViewの行のコマンドが発射されていないGridViewの中でSELECTコマンドのフィールドを持っていない –

+0

HollyStylesを、供給されている結合しないことをお勧めします。私の友達はどうすればいいですか? 助けてください。 – Supremestar

0

正確

DataTable dtGetStTable = (DataTable)ViewState["dtNewStudents"]; 

//Looping throgh Grid and deleting row after finding the checked row 
for (int i = dtGetStTable.Rows.Count - 1; i > -1; i--) 
{ 
GridViewRow row = GridView1.Rows[i]; 
bool isChecked = ((CheckBox)row.FindControl("CheckBox1")).Checked; 

if (isChecked) 
{ 
    try 
    { 
     string RollNo = dtGetStTable.Rows[i]["RollNo"].ToString(); 
     string Class = dtGetStTable.Rows[i]["Class"].ToString(); 
     string Division = dtGetStTable.Rows[i]["Division"].ToString(); 
     //Deleting the Reocrd from DataBase 
     TotalRecordDeleted += objSRE.DeleteTheSelectedRecord(RollNo, Class, Division); 

     dtGetStTable.Rows[i].Delete(); 
     dtGetStTable.AcceptChanges(); 
    } 
    catch (Exception ex) 
    { 

     //throw; 
    } 
} 

}

関連する問題