Параметризованная развертка с Gridview - PullRequest
2 голосов
/ 11 января 2012

Я пытаюсь получить ссылку «Выбрать» для Gridview, чтобы перейти к конкретной странице для выбранной строки в ASP.NET с C #. Это сеточное представление генерируется динамически в page_load и связано с довольно простым запросом выбора SQL. Каждая строка имеет уникальный идентификатор, и я хотел бы, чтобы это передавалось в качестве параметра в URL при нажатии кнопки выбора для этой строки. Таким образом, когда вы нажимаете кнопку «выбрать» в строке со значением идентификатора 9 (обратите внимание - не идентификатор, как определено в gridview, а один из запроса SQL), вы перенаправляетесь на адрес, такой как moreDetail.aspx ? ID = 9.

Однако, при попытке передать идентификатор в обработчик событий, с которым я столкнулся, возникают проблемы ... GridView.SelectedIndexChanging принимает обычный (объектный отправитель, EventArgs e) в качестве параметров и ничего больше, и поскольку Gridview создается в Page_Load класс EventArgs бесполезен. Кажется, я не могу найти способ передать полученный ранее идентификатор в обработчик событий.

После долгих поисков я попытался создать класс, который расширяет EventArgs (очевидно, с добавлением моего дополнительного параметра), но кажется, что использование любых других параметров, кроме (object sender, EventArgs e), просто не будет работать. Теоретически я мог бы повторить SQL-запрос в обработчике событий, но мне кажется, это ужасный способ достичь того, что я ищу, поэтому я надеюсь, что кто-то сможет увидеть, что я здесь не так, потому что я я уверен, что упускаю что-то очевидное.

Некоторый код - grid.SelectedRow.Cells [0] будет содержать параметр, который я хочу передать:

В Page_Load:

GridView grid = new GridView();  
grid.DataSource = source;  
CommandField selectField = new CommandField();  
selectField.ShowSelectButton = true;  
selectField.SelectText = "View Jobs";  
grid.Columns.Add(selectField);  
grid.SelectedIndexChanging += grid_SelectedIndexChanging;  
grid.DataBind();  
content.Controls.Add(grid);  

И обработчик событий:

    protected void grid_SelectedIndexChanging(object sender, EventArgs e)
    {
        Response.Redirect("ViewCustomer.aspx?id=" + grid.SelectedRow.Cells[0]);
    }

Очевидно, что это не работает, потому что область действия сетки не распространяется на обработчик ... но как может получить доступ к этим данным?

1 Ответ

1 голос
/ 11 января 2012

Вам необходимо преобразовать отправителя в GridView для ссылки на ваш вызывающий GridView:

protected void grid_SelectedIndexChanging(object sender, EventArgs e) 
{ 
    GridView grid = (GridView)sender;
    Response.Redirect("ViewCustomer.aspx?id=" + grid.SelectedRow.Cells[0]); 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...