如何根据一定条件在网格视图中添加动态超链接

时间:2011-12-07 05:12:35

标签: c# asp.net gridview

在我的网站中,我目前使用网格视图,该视图从3个表生成数据,即status,Project_glance,Application_header。 SQL Query返回4列,但在我的网格视图中,我只显示3列。最后一列返回项目的Status_id。以下是我的.aspx代码:

<asp:GridView ID="grdProf" runat="server" AllowPaging="True"   AutoGenerateColumns="false" OnPageIndexChanging="grdProf_PageIndexChanging">
<Columns>
  <asp:TemplateField>
        <ItemTemplate>
           <asp:HyperLink ID="hlnkView" Visible="true" Text="View" runat="server" >     </asp:HyperLink>
        </ItemTemplate>
  </asp:TemplateField>
  <asp:BoundField DataField="ApplicationID" HeaderText="ApplicantionID" />
  <asp:BoundField DataField="PRGLProjectTitle" HeaderText="Project Title" />
  <asp:BoundField DataField="Status" HeaderText="Project Status" />
</Columns>
</asp:GridView>

如果Status_id&gt; 15然后只有视图超链接可见,否则视图超链接文本将更改为“编辑”,导航URL将添加到此超链接,另一个超链接“删除”将显示允许用户删除项目详细信息。

请帮我找到正确的解决方案..

2 个答案:

答案 0 :(得分:0)

首先,将删除超链接添加到ItemTemplate。

然后,为了能够访问Status_id字段,您需要将其添加到GridView的DataKeys中。

然后,您可以订阅GridView的RowDataBound方法,获取超链接,检查status_id,并相应地设置超链接的可见性。

<asp:GridView DataKeyNames="status_id"

<ItemTemplate>
     <asp:HyperLink ID="hlnkView" Visible="true" Text="View" runat="server" >
     <asp:HyperLink ID="hlnkDelete" Visible="false" Text="Delete" runat="server" >
</asp:HyperLink>

void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {
    HyperLink delHl = e.Row.Cells[0].FindControl("hlnkDelete") as HyperLink;
    int statusId = (int)(sender as GridView).DataKeys[e.Row.RowIndex].Value;
    delHl.Visible = statusId <= 15; 
}

答案 1 :(得分:0)

喜欢这个

protected void grdProf_RowDataBound(Object sender, GridViewRowEventArgs e)
{

 if(e.Row.RowType == DataControlRowType.DataRow)
 {

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

   // Retrieve the status value for the current row. 
   string status = rowView["Status"].ToString();
   //Now you have the status 
   //get a reference to view hyperlink and hide it if that's the case
   Hyperlink hlnkView = e.Row.FindControl("hlnkView") as HyperLink;
   //example: 
   if(int.Parse(status)>15)
      hlnkView .Visible=false;//you are done

 }
}

至于显示“编辑”超链接,我会在“视图”列旁边有一个额外的列,并根据需要隐藏或显示此其他超链接,因为在某些情况下,您需要一个超链接列,在某些情况下你需要两个。