7

gridviewとsqldatasourceを使用しています。

グリッドビューに、[はい]と[いいえ]の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];現在のイベントでは利用できないため、行インデックスを取得する必要があります。

4

3 に答える 3

21

@mellamokbがすでに述べたように、送信者引数によってイベントを発生させるコントロールを常に取得し、それに応じてキャストするだけで済みます。

DropDownList ddl = (DropDownList)sender;

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

GridViewRow row = (GridViewRow)ddl.NamingContainer;

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

(TemplateField)または(BoundField)GridViewRowを使用して参照を取得すると、任意のコントロールを取得できます 。row.FindControl("ID")row.Cells[index].Controls[0]

たとえば(TextBox別の列にaがあると仮定して):

TextBox txtName = (TextBox)row.FindControl("TxtName");
于 2012-05-24T19:57:11.783 に答える
4

ドロップダウンリストの値だけを探している場合は、:として渡されますsender

DropDownList ddl = sender as DropDownList;
if (ddl.SelectedValue == "1")
   // do something...
于 2012-05-24T19:52:04.863 に答える
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
于 2012-10-18T07:13:28.530 に答える