Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET-GridView中的链接_C#_Asp.net_Gridview_Hyperlink - Fatal编程技术网

C# ASP.NET-GridView中的链接

C# ASP.NET-GridView中的链接,c#,asp.net,gridview,hyperlink,C#,Asp.net,Gridview,Hyperlink,我用GridView创建了一个页面,但如果我试图放置”,我需要在1列中创建链接; //其他栏目 } GridView1.DataSource=数据; GridView1.DataBind(); 或者在GridView中创建链接是否有更好的解决方案(以编程方式)?您可以使用以下代码: foreach (GridViewRow gr in gv.Rows) { HyperLink hp = new HyperLink(); hp.Text = gr.Cells[0].Text;

我用GridView创建了一个页面,但如果我试图放置
”,我需要在1列中创建链接;
//其他栏目
}
GridView1.DataSource=数据;
GridView1.DataBind();

或者在GridView中创建链接是否有更好的解决方案(以编程方式)?

您可以使用以下代码:

foreach (GridViewRow gr in gv.Rows)
{
    HyperLink hp = new HyperLink();
    hp.Text = gr.Cells[0].Text;
    hp.NavigateUrl = "~/Default.aspx?name=" + hp.Text;
    gr.Cells[0].Controls.Add(hp);
}

有关更多示例,请参见此链接

您可以使用以下代码:

foreach (GridViewRow gr in gv.Rows)
{
    HyperLink hp = new HyperLink();
    hp.Text = gr.Cells[0].Text;
    hp.NavigateUrl = "~/Default.aspx?name=" + hp.Text;
    gr.Cells[0].Controls.Add(hp);
}

有关更多示例,您可以查看此链接,而不是在DataTable中添加新列,您可以在GridView中添加TemplateField并在其中放置超链接控件。超链接控件在HTML中呈现为
标记

使用TemplateField的优点是不必动态创建控件(有时这不是最稳定的方法)

ASPX 根据您的要求,您可以直接在ASPX中设置超链接控件的属性:

<asp:GridView ID="gdv" runat="server" AutoGenerateColumns="false" OnRowDataBound="gdv_RowDataBound">
    <Columns>
        <asp:BoundField DataField="Id" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HyperLink ID="lnk" runat="server" 
                    Text='<%# DataBinder.Eval(Container.DataItem, "Text") %>'
                    NavigateUrl='<%# "otherpage.aspx?id=" + DataBinder.Eval(Container.DataItem, "Id").ToString() %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

ASPX和代码隐藏用于更复杂的场景 对于更复杂的场景,可以在代码隐藏中设置属性:

<asp:GridView ID="gdv" runat="server" AutoGenerateColumns="false" OnRowDataBound="gdv_RowDataBound">
    <Columns>
        <asp:BoundField DataField="Id" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HyperLink ID="lnk" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

protected void gdv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var lnk = (HyperLink)e.Row.FindControl("lnk");
        lnk.NavigateUrl = "otherpage.aspx?id=" + ((DataRowView)e.Row.DataItem)["Id"].ToString();
        lnk.Text = ((DataRowView)e.Row.DataItem)["Text"].ToString();
    }
}

受保护的void gdv_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
var lnk=(HyperLink)e.Row.FindControl(“lnk”);
lnk.NavigateUrl=“otherpage.aspx?id=“+((DataRowView)e.Row.DataItem)[“id”].ToString();
lnk.Text=((DataRowView)e.Row.DataItem)[“Text”].ToString();
}
}

RowDataBound
事件中,TemplateField中的超链接控件被标识,并且设置了
Text
NavigateUrl
属性。

您可以将TemplateField添加到GridView并在其中放置超链接控件,而不是在DataTable中添加新列在HTML中取消标记

使用TemplateField的优点是不必动态创建控件(有时这不是最稳定的方法)

ASPX 根据您的要求,您可以直接在ASPX中设置超链接控件的属性:

<asp:GridView ID="gdv" runat="server" AutoGenerateColumns="false" OnRowDataBound="gdv_RowDataBound">
    <Columns>
        <asp:BoundField DataField="Id" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HyperLink ID="lnk" runat="server" 
                    Text='<%# DataBinder.Eval(Container.DataItem, "Text") %>'
                    NavigateUrl='<%# "otherpage.aspx?id=" + DataBinder.Eval(Container.DataItem, "Id").ToString() %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

ASPX和代码隐藏用于更复杂的场景 对于更复杂的场景,可以在代码隐藏中设置属性:

<asp:GridView ID="gdv" runat="server" AutoGenerateColumns="false" OnRowDataBound="gdv_RowDataBound">
    <Columns>
        <asp:BoundField DataField="Id" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:HyperLink ID="lnk" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

protected void gdv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var lnk = (HyperLink)e.Row.FindControl("lnk");
        lnk.NavigateUrl = "otherpage.aspx?id=" + ((DataRowView)e.Row.DataItem)["Id"].ToString();
        lnk.Text = ((DataRowView)e.Row.DataItem)["Text"].ToString();
    }
}

受保护的void gdv_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
如果(e.Row.RowType==DataControlRowType.DataRow)
{
var lnk=(HyperLink)e.Row.FindControl(“lnk”);
lnk.NavigateUrl=“otherpage.aspx?id=“+((DataRowView)e.Row.DataItem)[“id”].ToString();
lnk.Text=((DataRowView)e.Row.DataItem)[“Text”].ToString();
}
}

RowDataBound
事件中,模板字段中的超链接控件被识别,并且
Text
NavigateUrl
属性被设置。

但是如何在我的for循环中直接添加链接?我不想有2个for循环,但是如何在我的for循环中直接添加链接?我不想有2个for循环,但我不知道如何添加直接实现到我的代码中(for循环),但我不知道如何直接实现到我的代码中(for循环)没有模板是不可能的?可以将html标记放入gridview吗?@Tomsk模板是将自定义html标记放入gridview单元格的稳定方式。我使用了超链接控件来显示链接。它呈现为
a
标记,但可以从ASP.NET轻松设置。我用一种更简单的方法更新了答案,而这种方法不需要重新设置ed a
RowDataBound
事件处理程序在code Behind.Im中获得:Type'System.Web.UI.WebControls.HyperLinkField'没有名为'ID'的公共属性……这不是将html标记放入GridView的更简单的方法吗?如果我需要在1列中包含两个自定义类的链接等呢?@Tomsk错误消息指向您选择的方向perLinkField而不是超链接控件。TemplateField是为将自定义HTML添加到GridView单元格中而构建的。因此,我仍然建议使用它,即使以后您决定将常规HTML而不是ASP.NET控件添加到其中。对于初学者,我会尝试使用带有超链接控件的TemplateField。我已经更新了答案并添加了一个link到如何使用TemplateField的概述。没有模板是不可能的?可以将html标记放入gridview吗?@Tomsk模板是将自定义html标记放入gridview单元格的稳定方式。我使用超链接控件显示链接。它呈现为
标记,但可以从ASP.NET轻松设置。我更新了他用一种更简单的方法来回答,即不需要代码隐藏中的
RowDataBound
事件处理程序。我得到:键入'System.Web.UI.WebControls.HyperLinkField'没有名为'ID'的公共属性……这不是将html标记放入GridView的更简单的方法吗?如果我需要在1列中包含两个自定义类的链接等怎么办?@Tomsk错误消息指向的方向是使用超链接字段而不是超链接控件。TemplateField是为将自定义HTML添加到GridView单元格中而构建的。因此,我仍然建议使用它,即使您稍后决定将常规HTML而不是ASP.NET控件放入其中。对于初学者,我会尝试使用带有超链接控件的TemplateField我已经更新了我的答案,并添加了一个链接,指向如何使用TemplateField的概述。