【问题标题】:Open new gridview through Hyperlink通过超链接打开新的gridview
【发布时间】:2014-06-12 13:55:47
【问题描述】:

如何通过同一页面上的超链接打开新的gridview,当用户单击此表上的任何超链接时,我不想关闭现有的gridview,但想显示与此相邻的另一个gridview。我有一些像下面这样的数据,当我单击任何这些超链接时,我想在同一页面上打开一个新的网格视图。新的 gridview 将拥有来自不同表的数据。

我无法插入图片,因为我没有足够的声誉,但可以分享我的 HTML 代码:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" DataKeyNames="UN_AT_Group">
    <Columns>
           <asp:HyperLinkField DataTextField="Group_Description" DataNavigateUrlFields="UN_AT_Group" DataNavigateUrlFormatString="~/Details.aspx?Id={0}"
    </Columns>
</asp:GridView>

【问题讨论】:

  • 只需将第二个网格视图隐藏在 page_load 上,并在单击第一个网格的超链接时使用正确填充的数据使其可见..
  • 为什么不使用 LinkBut​​ton 然后在 CodeBehind 中处理所有内容?如果您将所有内容都放在同一页面上...
  • @DatRid- 我(编程新手)不确定是否可以使用 LinkBut​​ton,因为我正在从数据库中获取数据并立即将它们转换为超链接,我不知道我是否可以做类似的事情LinkBut​​ton 的事情。
  • @user3581461 你能告诉我你是如何将数据转换成超链接的吗?
  • @DatRid - 您可以看到列之间的线,其中我将列标题作为 DataTextField 传递,将 UN_AT_Group 作为 DataNavigateUrlFields 传递,这是 asp:HyperLinkField,因此它将其转换为超链接。我不能把我的网格的图片,是一个问题。这是我关注的链接 - aspsnippets.com/Articles/…

标签: c# asp.net gridview hyperlink


【解决方案1】:

改用链接按钮:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" DataKeyNames="UN_AT_Group" OnRowCommand="GridView1_RowCommand" Visible="True">
    <Columns>    
        <asp:TemplateField>
            <ItemTemplate>
                 <asp:LinkButton ID="GotoNextGrid" runat="server" CommandArgument="NextGrid" CommandName="NextGrid" Text="Show Rights">
                 </asp:LinkButton>  
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>  
</asp:GridView>

为你第二个GridView做同样的事情,但设置Visibile="false"

然后在 CodeBehind 中捕获它:(注意,确保我在此处作为 Label 的内容也可以是其他内容……无论您的 DataTextField 是什么。

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "NextGrid")
    {
        LinkButton lb = (LinkButton)e.CommandSource;
        GridViewRow gvr = (GridViewRow)lb.NamingContainer;
        Label lbl = gvr.FindControl("GroupDescription") as Label;
        string description = lbl.Text;
        GridView1.Visible = false;
        GridView2.Visible = true;
        FillDataForGridView2(description) //Fill the Data for GridView2 here and pass description as parameter
    }
}

注意如果你使用UpdatePanel,那么你需要添加一个Trigger

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="GridView1" EventName="RowCommand" />
</Triggers>

我希望这会有所帮助。

如果您有任何问题,请尽管提问。

【讨论】:

  • 感谢您的建议,这确实是实现我想要的好方法,但我选择了另一种方法。我正在使用 CommandField 并动态添加它。但是,对于我提出的问题,您的回答是正确的。
  • 那也不错!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2015-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多