7

我正在使用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..
}

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

4

3 回答 3

21

正如@mellamokb 已经提到的那样,您始终可以通过 sender 参数获得引发事件的控件,您只需相应地对其进行转换。

DropDownList ddl = (DropDownList)sender;

如果您还需要获取GridViewRowDropDownList(或 GridView 的 TemplateField 中的任何其他控件)的引用,则可以使用该NamingContainer属性。

GridViewRow row = (GridViewRow)ddl.NamingContainer;

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

GridViewRow通过使用row.FindControl("ID")(TemplateField) 或row.Cells[index].Controls[0](BoundField)获得参考后,您可以获得任何控件 。

例如(假设TextBox在另一列中有一个):

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 回答