我正在使用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];
在当前事件中不可用。
答案 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