Попробуйте это ..... наведите указатель на HyperLink в событии RowDataBound. Вы используете много BoundFields, и это нормально, но это еще один способ нацелить элемент управления на каждую указанную c строку, когда вы привязываете.
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
HyperLink link = (HyperLink)e.Row.FindControl("lnk");
if (link != null)
{
link.Visible = false;
}
}
}
На вашем интерфейсе вы нужно добавить событие в GridView ....
<asp:GridView ID="GridView1" runat="server" OnRowDataBound="GridView1_RowDataBound">
</asp:GridView>
Вот еще один пример, чтобы получить DataItem для GridView и затем выполнить logi c. Я создал образец класса MyProduct
и представляю, что источником данных для моего GridView является Collection<MyProduct>()
.
public partial class MyProduct
{
public string id { get; set; }
public string name { get; set; }
public string sku { get; set; }
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
MyProduct rowData = (MyProduct)e.Row.DataItem;
if (rowData != null)
{
// only hide link if property for product meets our logic
if (string.Equals(rowData.sku, "MySkuProduct", StringComparison.InvariantCultureIgnoreCase))
{
HyperLink link = (HyperLink)e.Row.FindControl("lnk");
if (link != null)
{
link.Visible = false;
}
}
}
}
}