如何在Dropdownlist中获取行索引selectedIndexChanged?

时间:2012-05-24 19:50:19

标签: c# asp.net

我正在使用gridview和sqldatasource。

我的gridview中有一个下拉列表,其中包含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..
}

我需要获取Row索引,因为此GridViewRow row = GridView1.Rows[e.RowIndex];在当前事件中不可用。

3 个答案:

答案 0 :(得分:19)

正如@mellamokb已经提到的那样,你总是通过sender参数获得引发事件的控件,你只需要相应地转换它。

DropDownList ddl = (DropDownList)sender;

如果您还需要获取GridViewRow的{​​{1}}(或GridView的TemplateField中的任何其他控件)的引用,则可以使用NamingContainer属性。< / p>

DropDownList
  

但我需要获取行索引,以便从不是下拉列表的模板字段获取值是文本框

使用GridViewRow row = (GridViewRow)ddl.NamingContainer; (TemplateField)或GridViewRow(BoundField)获得row.FindControl("ID")引用后,您可以获得任何控制权。

例如(假设另一列中有row.Cells[index].Controls[0]):

TextBox

答案 1 :(得分:4)

如果您要查找的只是下拉列表的值,则会将其作为sender传递:

DropDownList ddl = sender as DropDownList;
if (ddl.SelectedValue == "1")
   // do something...

答案 2 :(得分: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