我使用GridView创建了页面,但是我需要在1列中创建链接,如果我尝试添加<a>
标记它不起作用,它只显示简单的html <a>
标记。
我需要在第一行链接到otherpage.aspx?id = 1,第二行otherpage.aspx?id = 2等等。
Grid.aspx
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" CellPadding="4"
ForeColor="#333333" GridLines="None" PageSize="5" ViewStateMode="Enabled"
Width="100%" OnSelectedIndexChanged="GridView1_SelectedIndexChanged1">
<AlternatingRowStyle BackColor="White" />
<Columns>
</Columns>
</asp:GridView>
Grid.aspx.cs
DataTable data = new DataTable();
data.Columns.Add("New column");
// others columns
for (int i = 1;i < 10; i++)
{
data.Rows.Add();
data.Rows[i]["New column"] = "<a href='otherpage.aspx?id='"+ i +">Link</a>";
// other columns
}
GridView1.DataSource = data;
GridView1.DataBind();
或者是在GridView中以编程方式创建链接的更好的解决方案吗?
答案 0 :(得分:2)
您可以使用以下代码:
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);
}
如需更多样本,您可以看到此链接create links in dynamically created grid view
答案 1 :(得分:1)
您可以将GridField添加到GridView并在其中添加HyperLink控件,而不是在DataTable中添加新列。 Hyperlink控件在HTML中呈现为a
标记。
使用TemplateField的优点是您不必动态创建控件(有时这不是最稳定的方法)。有关TemplateField的更多详细信息,请参阅此link。
根据您的要求,您可以直接在ASPX中设置HyperLink控件的属性:
<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>
对于更复杂的方案,您可以在Code Behind中设置属性:
<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();
}
}
在RowDataBound
事件中,标识了TemplateField中的HyperLink控件,并设置了Text
和NavigateUrl
属性。