将gridview中的数据作为会话传递

时间:2012-01-28 14:20:44

标签: c# asp.net session gridview

我有一个网格视图,其中包含客户端ID,客户端名称,客户端联系号码以及指向客户端详细信息的超链接。 我想将选定的clint ID传递给另一个asp页面(clientDetail.aspx& ClientContact.aspx)。 我想将clientID作为会话传递。但是我该怎么做呢?有人可能会对此表示反对,因为我对此非常陌生。

&安培;我如何在clientDetail.aspx&中使用传递的数据? ClientContact.aspx?

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

将两个类型为HyperLinkField的新列添加到gridView,如下所示。现在clientID作为QueryString传递。一个链接在这里

 <asp:HyperLinkField DataNavigateUrlFields="ClientID" 
                                DataNavigateUrlFormatString="~/ClientDetails.aspx?id={0}" 
                                Text="Client Details" />

答案 1 :(得分:1)

假设您选择了带有按钮或链接按钮的网格行,您可以使用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
   }

还有其他使用不同事件的替代方法,例如你可以使用GridView的DataKeys集合存储你感兴趣的值并从那里选择值

标记片段

<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隐藏标签 - 如果它不适合UI。或使用隐藏字段(runat="server")。我要停下来 - 只要输入就可能会让人感到困惑。

答案 2 :(得分:1)

您应该能够在超链接的navgiate url中评估asp.net gridview的clientid字段,并将其作为查询字符串传递,如下所示:

<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>