使用C#asp.net在gridview中创建超链接按钮单元格

时间:2014-02-21 09:23:48

标签: c# asp.net gridview hyperlink

我的网页上有一个GridView。其中列显示的数据为状态,名称,ID和操作。我的状态列始终随机填充3个值(完整,排队失败)。

现在我想将此状态列值显示为链接,如果它的值为“Failed”或“Queued”。但“完整”状态不应显示为链接。

如何在运行时间内实现此设计?

我将数据绑定到网格中的代码是,

protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dtActionList = clsactionList.GetADActionList();
        grdADActionList.DataSource = dtActionList;
        grdADActionList.DataBind();
    }
    protected void grdADActionList_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        foreach (GridViewRow gvr in grdADActionList.Rows)
        {
            if ((gvr.FindControl("Label1") as Label).Text == "Completed")
            {
                (gvr.FindControl("Label1") as Label).Visible = true;
                (gvr.FindControl("HyperLink1") as HyperLink).Visible = false;
            }
        }
    }

使用此代码我只是简单地绑定网格中的值。我无法将“状态”列创建为具有基于该状态列的绑定值的链接按钮。

我的.aspx代码是:

<asp:GridView ID="grdADActionList" runat="server" Height="83px" Width="935px" AutoGenerateColumns="false" OnRowDataBound="grdADActionList_RowDataBound">

     <Columns>
      <asp:TemplateField HeaderText="Status" SortExpression="Status">
            <ItemTemplate>
                 <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='http://localhost:52807/Default.aspx?'><%# Eval("Status") %>
                 </asp:HyperLink>
                 <asp:Label ID="Label1" runat="server" Text="<%# Container.DataItem %>" Visible="False"></asp:Label>
            </ItemTemplate>
      </asp:TemplateField>
      <asp:BoundField DataField="GivenName" HeaderText="GivenName"/>

                           

请帮我进一步做这件事....

4 个答案:

答案 0 :(得分:1)

在GridViewDataBound事件中,如果值完成,只需隐藏链接并显示简单标签。
ASP.NET:

<asp:TemplateField HeaderText="Status" SortExpression="Status">
    <ItemTemplate>
        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='your_url'>
            <%# Eval("Status") %>
        </asp:HyperLink>
        <asp:Label ID="Label1" runat="server" Text="<%# Eval("Status") %>" Visible="False"></asp:Label>
    </ItemTemplate>
</asp:TemplateField>

<强> C#:

protected void onGridViewDataBound()
{
    foreach(GridViewRow gvr in grd)
        if((gvr.FindControl("Label1") as Label).Text.ToLower() == "complete") // Updated Line
        {
            (gvr.FindControl("Label1") as Label).Visible = true;
            (gvr.FindControl("HyperLink1") as HyperLink).Visible = false;
        }
}

答案 1 :(得分:0)

你必须在设计文件中工作意味着.aspx文件 你必须使用和

<asp:GridView ID="GridView1" runat="server" EnableModelValidation="True">
   <asp:TemplateField HeaderText="Hyperlink">
<ItemTemplate>
    <asp:HyperLink ID="HyperLink1" runat="server" 
        NavigateUrl='<%# Eval("CODE", @"http://localhost/Test.aspx?code={0}") %>' 
        Text='link to code'>
    </asp:HyperLink>
</ItemTemplate>

    

答案 2 :(得分:0)

您可以在RowDataBound事件

上放置处理程序
protected void gw_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)    
    {

        DataRowView v_DataRowView = (DataRowView)e.Row.DataItem;

        string NavigateUrl = <....place your link here with DataRowView info>

        e.Row.Attributes.Add("onclick", NavigateUrl);
    }
}

答案 3 :(得分:0)

现在您已自动生成列,因此请先禁用该功能。然后你需要将每个列定义为BoundField,对于超链接,考虑到你的条件,最好的方法是定义模板字段:

<asp:GridView ID="grdADActionList" runat="server" BorderStyle="Double" BorderWidth="3px" 
               Height="83px" Width="935px"
               AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField DataField="Name" HeaderText="Name"/>
            <asp:BoundField DataField="Action" HeaderText="Action"/>
            <asp:BoundField DataField="Id" HeaderText="Id"/>
            <asp:TemplateField HeaderText="Status">
                <ItemTemplate>
                    <asp:HyperLink runat="server" NavigateUrl="~/link/address" Text='<%# Eval("Status") %>'
                                   Visible='<%# (int)Eval("Status") != 1 %>'/>
                    <asp:Label runat="server" Text='<%# Eval("Status") %>'
                               Visible='<%# (int)Eval("Status") == 1 %>'>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
</asp:GridView>

请注意,这只是一个变体 - 您没有指定Status列包含的值,因此我假设这是基于int的枚举。