Передача данных из сетки в виде сеанса - PullRequest
1 голос
/ 28 января 2012

У меня есть сетка с идентификатором клиента, именем клиента, контактным номером клиента и гиперссылкой на детали клиента.Я хотел бы передать выбранный идентификатор клинта на другую страницу asp (clientDetail.aspx & ClientContact.aspx).Я думаю о передаче clientID в качестве сеанса.Но как мне это сделать?Может ли кто-нибудь меня осудить, потому что я новичок в этом.

и как мне использовать переданные данные в clientDetail.aspx & ClientContact.aspx?

Заранее спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 28 января 2012

Добавьте два новых столбца типа HyperLinkField в gridView следующим образом. Теперь clientID передается как QueryString. Одна ссылка здесь

 <asp:HyperLinkField DataNavigateUrlFields="ClientID" 
                                DataNavigateUrlFormatString="~/ClientDetails.aspx?id={0}" 
                                Text="Client Details" />
1 голос
/ 28 января 2012

Вы должны иметь возможность оценить поле clientid вида сетки asp.net в навигационном URL-адресе гиперссылки и передать его в виде строки запроса, например:

<asp:gridview id="OrdersGridView" 
        datasourceid="OrdersSqlDataSource" 
        autogeneratecolumns="false"
        runat="server">

        <columns>

          <asp:boundfield datafield="ClientID" 
            headertext="Client ID"/>
          <asp:boundfield datafield="ClientName" 
            headertext="Client Name"/>
          <asp:boundfield datafield="ClientContact" 
            headertext="Client Contact"/>
          <asp:hyperlinkfield text="Details..."
            navigateurl="~\details.aspx?clientid='<%# Eval("ClientID") %>'"            
            headertext="Order Details"
            target="_blank" />

        </columns>

      </asp:gridview>
1 голос
/ 28 января 2012

Предполагая, что вы выбрали строку сетки кнопкой или кнопкой связи, вы можете использовать событие OnRowCommand

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

void ContactsGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
{
     if (e.Row.RowType == DataControlRowType.DataRow)
     {
           Label lblMyValue = (Label)e.Row.FindControl("lblMyValue");
           Session["myValue"] = lblMyValue .Text;
     }
}

Существуют и другие варианты этого, например, вы можете сохранить интересующее вас значение в свойстве CommandArgument кнопки, которую вы используете для выбора строки. Аргумент команды будет доступен в RowCommand событии

 void ContactsGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
 {
      string arg = e.CommandArgument;
      //.. put into session here
   }

И есть альтернативы, использующие разные события, например, вы можете использовать коллекцию DataKeys GridView, чтобы сохранить интересующее вас значение и выбрать его там

Фрагмент разметки

<asp:gridview id="CustomersGridView" 
        //.. more properties   
        datakeynames="myID"
        onselectedindexchanged="MyGridView_SelectedIndexChanged"
        runat="server">

Код позади

 void MyGridView_SelectedIndexChanged(Object sender, EventArgs e)
  {

    int index = MyGridView.SelectedIndex;
    Session["myValue"] = CustomersGridView.DataKeys[index].Value.ToString();
  }

Есть несколько альтернатив, чтобы заставить это работать. Я бы использовал первый подробный, если бы это был я - мне всегда было легче добираться до работы. Вы можете сделать метку скрытой с помощью Css, если хотите - если она не подходит для пользовательского интерфейса. Или используйте скрытое поле (с runat="server"). Я собираюсь остановиться - я рискую запутаться, просто набрав.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...