2012-05-24 7 views
6

私はgridviewとsqldatasourceを使用しています。ドロップダウンリストの行インデックスを取得する方法selectedIndexChanged?

グリッドビューにドロップダウンリストが2つあります:はいといいえ。

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    GridViewRow row = GridView1.Rows[e.RowIndex]; 
    DropDownList ddl = ((DropDownList)row.FindControl("DropdownList1")); 
    if(ddl.selectedvalue == "1") 
     //etc.. 
} 

このGridViewRow row = GridView1.Rows[e.RowIndex];は、現在のイベントでは利用できないので、私は行のインデックスを取得する必要があります。あなたが探しているすべてのドロップダウンリストの値がある場合は、そのは、次のように渡されます

+1

だけでUIの問題を、あなただけがRadioButtonListのを使うべき2つの値を持っている場合。 DropDownListは2回のクリックを必要とし、RadioButtonListは1回だけ必要です。 –

答えて

19

、あなたは常に送信者がイベントを発生させたコントロールを取得しますあなたがそれを適切に投げかけるだけです。

DropDownList ddl = (DropDownList)sender; 

あなたも、あなたがNamingContainerプロパティを使用することができ、DropDownList(またはGridViewコントロールのTemplateFieldで他のコントロール)のGridViewRowへの参照を取得する必要がある場合。

GridViewRow row = (GridViewRow)ddl.NamingContainer; 

が、私はドロップダウンリストではありませんtemplatefieldから値を取得するため、行のインデックスを取得する必要がありますが、テキストボックス

であるあなたがGridViewRow参照を持っていたら、あなたは使用して、任意のコントロールを得ることができますrow.FindControl("ID")(TemplateField)またはrow.Cells[index].Controls[0](BoundField)。例えば

(別の列でTextBoxがありますと仮定した場合):

TextBox txtName = (TextBox)row.FindControl("TxtName"); 
+0

ありがとう、ありがとうが、ドロップダウンではないテンプレートフィールドから値を取得するための行インデックスを取得する必要があります。テキストボックスです。 – Jax

+0

@jax:私の答えを編集しました。 –

4

sender

@mellamokbはすでに述べたように
DropDownList ddl = sender as DropDownList; 
if (ddl.SelectedValue == "1") 
    // do something... 
+0

これはうまくいったのですが、どのように行を取得できますか?同じイベントでtemplatefieldの値を取得する必要があるためです。たとえば、これは行更新イベントです。String DS =((TextBox)row.Cells [6] .FindControl( "TXT"))。 – Jax

+0

私はあなたが 'ddl.Parent'をやることができると思うし、' ddl.Parent.Parent'かもしれないと思う。 GridViewRowを見つけるために外に出なければならない階層内のいくつのレベルを試してみる必要があります。 – mellamokb

+0

私はドロップダウン行を取得するつもりはない、私はちょうどテンプレートフィールドから値を取得する行編集インデックスが必要です。 – Jax

1
Protected Sub ddlneedlocationcmf_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim gvrow As GridViewRow = CType(sender, DropDownList).NamingContainer 
    Dim rowindex As Integer = CType(gvrow, GridViewRow).RowIndex 


End Sub 
+2

回答を投稿していただきありがとうございます!コードスニペットは質問に答えることができますが、説明などのようにいくつかの追加情報を追加することはまだ素晴らしいです。 – j0k

関連する問題