Есть несколько способов сделать это.Вам на самом деле не нужно подписываться на RowDataBound
событие для этого.
Вам нужен столбец TemplateField
, который содержит UserControl, который удовлетворяет вашим потребностям (HyperLink
, LinkButton
или любой другой)
Давайте предположим, что ваш TemplateColumn выглядит так:
<asp:TemplateField>
<ItemTemplate>
<asp:HyperLink runat="server" ID="hlContent" Text="Details" />
</ItemTemplate>
</asp:TemplateField>
В разметке вы можете иметь привязку данных, как предложил Icarus.Означает, что ваша гиперссылка будет выглядеть так (не проверено):
<asp:HyperLink runat="server" ID="hlContent" Text="Details" />
Другой вариант - использовать событие RowDataBound
, как вы задали его в своем вопросе:
protected void GridView1_RowDataBound(Object sender, GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow) // neccessary to differentiate between content, header and footer
{
HyperLink hlContent = e.Row.FindControl("hlContent") as HyperLink;
YourObject dataItem = e.Row.DataItem as YourObject; // Depending on what datatype your e.Row.DataItem is. Take a look at it which the QuickWatch
hlContent.NavigateUrl = String.Format("displaycontent.aspx?id={0}", dataitem.id);
}
}
Редактировать : После публикации нескольких ответов о том, как использовать событие RowDataBound, я решил написать статью с его описанием: http://www.tomot.de/en-us/article/7/asp.net/gridview-overview-of-different-ways-to-bind-data-to-columns