【问题标题】:Passing data from gridview as session从gridview传递数据作为会话
【发布时间】:2012-01-28 14:20:44
【问题描述】:

我有一个带有客户 ID、客户名称、客户联系电话和指向客户详细信息的超链接的网格视图。 我想将选定的 clint ID 传递给另一个 asp 页面(clientDetail.aspx 和 ClientContact.aspx)。 我正在考虑将 clientID 作为会话传递。但是我该怎么做呢?有人可以指导我吗,因为我对此很陌生。

& 我如何使用 clientDetail.aspx 和 ClientContact.aspx 中传递的数据?

提前感谢您的帮助。

【问题讨论】:

    标签: c# asp.net session gridview


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      假设您选择了带有按钮或链接按钮的网格行,您可以使用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")。我要停下来了——我只是在冒着混淆的风险。

      【讨论】:

        【解决方案3】:

        您应该能够在超链接的导航 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>
        

        【讨论】:

          猜你喜欢
          • 2019-10-27
          • 1970-01-01
          • 2013-03-26
          • 2016-11-15
          • 2023-03-29
          • 1970-01-01
          • 2011-03-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多