2012-05-24 3 views
6

Я использую gridview и sqldatasource.Как получить индекс строки в Dropdownlist selectedIndexChanged?

У меня есть раскрывающийся список в моем сетке с двумя значениями: Да и Нет.

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. Для DropDownList потребуется два клика, где RadioButtonList требует только один. –

ответ

19

Как @mellamokb уже упоминалось, вы всегда получите контроль, вызвавший событие отправителем аргумент, вам нужно только указать его соответствующим образом.

DropDownList ddl = (DropDownList)sender; 

Если вам также необходимо, чтобы получить ссылку на GridViewRow в DropDownList (или любого другого элемента управления в TemplateField из в GridView), вы можете использовать NamingContainer свойство.

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

Если все, что вы ищете значение DropDownList, который проходил в качестве sender:

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

все проработало, но знаете ли вы, как я могу получить строку? потому что мне нужно получить в одном и том же событии значение поля шаблона: например, это событие обновления строки: 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

Смежные вопросы