2011-01-31 6 views
1

私はこのような何かを試みたが、うまくいきませんでした:GridView RowCommandイベントのコントロールを見つけるには?

GridViewRow row = (GridViewRow)(((Repeater)e.CommandSource).NamingContainer); 
Repeater _rpt1 = row.Cells[8].FindControl("rptReg") as Repeater; 

はエラー:

Unable to cast object of type 'System.Web.UI.WebControls.Button' to type 'System.Web.UI.WebControls.Repeater'. 

私はGridViewコントロールを使用してOnRowCommandイベントに以下のコードを持つことができる方法はありますか?あなたの誤差がある

実際に私は、GridViewコントロールから行を削除しようとしているとするとき、ユーザーがクリックその上、私はmulitple IDをつかみ、SPに渡していますし、テーブルとdatabind the gridview

GridViewRow row = gv.SelectedRow;   
    Repeater _rpt = gv.Rows[e.RowIndex].Cells[8].FindControl("rptReg") as Repeater; 
    Repeater _rpt1 = gv.Rows[e.RowIndex].Cells[9].FindControl("rptVisitor") as Repeater; 

    foreach (RepeaterItem item in _rpt.Items) 
    { 
     TextBox _txt = item.FindControl("txtId") as TextBox; 
     TextBox _txt1 = item.FindControl("txtName") as TextBox; 
     //update db 
    } 
+0

私はわかりません次のようにOnRowCommandでe.CommandName == "delete"を確認することができます – Malk

+0

thats正しいが、私はRowCommandでFindControlを行う方法を探している状況がありますか? –

+0

リピータがヌルになると思いますか?多分yoyはgvを "Gridview gv =(Gridview)sender;"と定義するべきです – Malk

答えて

0

を更新します"rptReg"という名前のコントロールがボタンであることを伝えます。

GridViewのは、複数のIDが ですから、のような「PERSONID」を引き出すだろう保持できるというプロパティDataKeysを持っています

 string personId = GridView1.DataKeys[e.RowIndex]["PersonId"].ToString(); 
3

これを試してください:

var viewRow = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer); 
foreach (GridViewRow gvr in gvDetails.Rows) 
{ 
    var btnSelect = (ImageButton)viewRow.FindControl("btnSelect"); 
    if (gvr == viewRow) 
    { 
     if (btnSelect.ImageUrl.ToLower() == "~/images/rbnormal.jpg") 
     { 
      btnSelect.ImageUrl = "~/Images/rbSelected.jpg"; 
      btnSelect.Enabled = false; 
     } 
    } 
    else 
    { 
     btnSelect.ImageUrl = "~/Images/rbnormal.jpg"; 
     btnSelect.Enabled = true; 
    } 
} 
+0

gvDetailsは未定義です。 –

関連する問題