2013-06-19 7 views
1

Я пишу веб-приложение в ASP.NET с использованием C# с SQL Server.Выбор строки в gridview, затем передача выбранной строки на другую страницу

В основном я хочу, чтобы иметь возможность выбрать определенную строку в GridView и передать первичный ключ из этой строки на другую страницу, которая содержит серию текстовых полей и меток, я хочу, чтобы они были заполнены данными из выбранная строка.

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

Я исследовал немного о отборном заявлении в ASP.NET, но я не могу понять, как передать эту информацию на другую страницу.

+0

Спасибо за быстрый ответ, ребята, оцените его –

ответ

7

Один из способов сделать это:

Во-первых, в вашем GridView, добавить первичный ключ в ключевых полей,

DataKeyNames="Id" 

и добавить событие для выбора,

OnSelectedIndexChanging="OnRowSelected" 

Затем в вашем коде позади:

protected void OnRowSelected(object sender, GridViewSelectEventArgs e) 
{ 
    // Get the datakey of the selected row 
    var id = Convert.ToInt32(grdCompany.DataKeys[e.NewSelectedIndex].Value); 
    // Redirect to second page 
    Response.Redirect("SecondPage.aspx?Id=" + id); 
} 

Затем в SecondPage.aspx, вы можете получить идентификатор из выбранной строки по:

var id = Request.QueryString["Id"]; 
+0

Это сработало! Большое вам спасибо –

+0

Здравствуйте, Бен, возможно ли перейти на первую страницу с выбранной записью со второй страницы? – Vinay

+1

Здравствуйте @Vinay, да, это возможно. Это просто вопрос передачи правильных ключей в строку запроса. –

1

Я хотел бы использовать Session. Поэтому я полагаю, что у вас есть какая-то переменная

var currentGridViewRow = GridView.SelectedRow; 

Вы можете вставить в сессии информацию об этой строке:

Session["currentGridViewRow"] = currentGridViewRow; 

После этого в вашем втором коде позади вы получите информацию из сессии.

var currentGridViewRow = Session["currentGridViewRow"]; 

Пожалуйста, помните, что это очень простой и общий подход. Хорошая практика - написать класс, который будет управлять вашим сеансом.

Полезная ссылка: http://msdn.microsoft.com/en-us/library/ms178581%28v=vs.100%29.aspx

+0

Еще один отличный способ сделать это, большое вам спасибо за ваше решение –

2

Вот еще один способ, если вы не используете DataKeyNames.

int RowIndex; 
protected void gvName_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    GridViewRow row = gvName.SelectedRow; 
    string name = gvName.Rows[RowIndex].Cells[1].Text; //Gets column 

    //With DataKey 
    string name = gvName.DataKeys[RowIndex]["TicketId"].ToString(); 

    Response.Redirect("~/secondpage.aspx?ServiceCenter=" + name); 
} 
protected void gvName_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    //Gets Gridview row number when clicked 
    RowIndex = Convert.ToInt32(e.CommandArgument); 
}