2013-12-25 3 views
1

Я довольно новичок в ASP.NET. У меня есть термин проект; проблема, с которой я сталкиваюсь, описана следующим образом:Получение выделенного объекта из GridView

  • У меня есть страница с именем Контакты.
  • У меня есть класс под названием «Пользователь».
  • У меня есть ArrayList User, который привязан как источник данных к Gridview в Contacts.

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

Моя проблема в том, что я не знаю, как «извлечь» выделенный объект из GridView. Я пробовал событие SelectedIndexChanged, но это не работает, потому что ответ не перенаправляется на новую страницу.

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

Edit: (код)

HTML

<asp:GridView ID="GVV2" runat="server" AutoGenerateColumns="False" 
Height="25px"style="margin-right: 4px" Width="616px" 
    onselectedindexchanged="GVV2_SelectedIndexChanged" > 
    <Columns> 
     <asp:TemplateField> 
      <HeaderStyle CssClass="checkBoxCell" /> 
      <ItemStyle CssClass="checkBoxCell" /> 
      <ItemTemplate> 
     <asp:CheckBox ID="chk" runat="server" /> 
     </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="FullName_" HeaderText="Name"> 
     <HeaderStyle CssClass="SenderCell" /> 
     <ItemStyle CssClass="SenderCell" /> 
     </asp:BoundField> 
     <asp:HyperLinkField DataTextField="EmailID_" HeaderText="Email ID" 
      NavigateUrl="~/ViewContact1.aspx" > 
     <HeaderStyle CssClass="emailCell" /> 
     <ItemStyle CssClass="emailCell a.decor" /> 
     </asp:HyperLinkField> 
    </Columns> 
</asp:GridView> 

Код За

public partial class Contacts1 : System.Web.UI.Page 
{ 
    Storage1 STO; 
    String currentUser; 
    Users1 selectedUser; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Initiation(); 
     GVV2.DataSource = Contact.getContactList(currentUser, STO); 
     GVV2.DataBind(); 
    } 
    private void Initiation() 
    { 
     if (Session["SignInUser"] == null) 
      Session["SignInUser"] = currentUser; 
     else currentUser= (String)Session["SignInUser"];` 

     if (Session["Storage"] == null) 
      Session["Storage"] = STO; 
     else 
     { 
      STO= new Storage1(); 
      STO = (Storage1)Session["Storage"]; 
     } 

    } 

    protected void GVV2_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     Session["SelectedContact"]=GVV2.SelectedRow; 
     Response.Redirect("ViewContact1.aspx"); 
    } 
} 
+0

Пожалуйста, укажите код сома :) – Softwarehuset

+0

хорошо я буду. –

ответ

1

Используя кнопку ссылки

Другой способ сделать это состоит в использовании GridView OnRowCommand вместо onselectedindexchanged.

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

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:LinkButton ID="linkBtnDetails" runat="server" Text="Details" CommandName="Details" 
      CommandArgument='<%#Eval("ID")%>' /> 
    </ItemTemplate> 
</asp:TemplateField> 

Также вы должны определить onrowcommand для GridView:

<asp:GridView ID="GVV2" runat="server" AutoGenerateColumns="False" 
Height="25px"style="margin-right: 4px" Width="616px" 
    onrowcommand="UserDetails_RowCommand" > 

И, наконец, код позади, где вы получите идентификатор пользователя, установите его в переменной сеанса и перенаправляет на страницу.

void UserDetails_RowCommand(Object sender, GridViewCommandEventArgs e) 
    { 
    if(e.CommandName=="Details") 
    { 
    Session["SelectedContact"]=e.CommandArgument; 
     Response.Redirect("ViewContact1.aspx"); 
    } 
    } 

по гиперссылкам полю

Отправить ID в строке запроса.

<asp:HyperLinkField DataTextField="EmailID_" HeaderText="Email ID" 
      NavigateUrl="~/ViewContact1.aspx?id="+"<%#Eval('ID')%>" > 

В коде позади на странице загрузки получить идентификатор, как это:

string getUserID = Request.QueryString["id"]; 
int userID = Convert.ToInt32(getUserID); 
+0

Что делать, если я не хочу использовать ссылку? Тогда что мне делать? –

+0

Какой контроль вы хотите использовать? – tilda

+0

Я хочу использовать гиперссылку –

1

1º Путь: Передайте параметр QueryString со значением, что вам нужно по перераспределению cted page, в этом случае это может быть код пользователя. Очевидно, что вы не можете передать объект User на этот случай, но вы можете получить данные User на целевой странице.

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:Hyperlink ID="hplViewDetails" runat="server" NavigateUrl='<%# Eval("userCode", "~ViewContact1.aspx?userCode={0}")%>' Text="Details" /> 
    </ItemTemplate> 
</asp:TemplateField> 

Чтобы получить значение на Перенаправление:

int userCode = Convert.ToInt32(Request["userCode"]); 

2º Путь: реализовать интерфейс на странице IPostBackEventHandler.

Помещенной гиперссылка, указывающую на яваскрипт функцию:

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:Hyperlink ID="hplViewDetails" runat="server" NavigateUrl='<%# Eval("userCode", "javascript:redirectToUserDetails({0})")%>' /> 
    </ItemTemplate> 
</asp:TemplateField> 

Этой функция вызовет обратную передачу на страницу:

<script> 
    function redirectToUserDetails(userCode) 
    { 
     __doPostBack('<%= ClientID %>', userCode); 
    } 
<script> 

и метод Postback будет делать правильный редирект (RaisePostBackEvent метода):

public void RaisePostBackEvent(string eventArgument) 
{ 
    int userCode = Convert.ToInt32(eventArgument); 
    User user = GetUserFromSession(userCode); 
    string userObjectKey = Guid.NewGuid().ToString(); 
    Session[userObjectKey] = user; 
    Response.Redirect(string.Format("~/ViewContact1.aspx?userObjectKey={0}", userObjectKey); 
} 

On ViewContact1.aspx, восстановить t он объект:

User user = (User)Session["userObjectKey"]; 

Это также можно сделать, используя пустую кнопку на странице, чтобы вызвать обратную передачу на сервер.

+0

Спасибо большое !!! –

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