Как добавить динамическую гиперссылку в Grid View при определенных условиях - PullRequest
1 голос
/ 07 декабря 2011

На моем веб-сайте в настоящее время я использую сетку, которая генерирует данные из 3 таблиц, а именно: status, Project_glance, Application_header. SQL-запрос возвращает 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> 15, то будет отображаться только гиперссылка просмотра, в противном случае текст гиперссылки просмотра будет изменен на «Редактировать», и к этой гиперссылке будет добавлен URL-адрес навигации, а другая гиперссылка «Удалить» покажет пользователю возможность удалить проект подробно.

Пожалуйста, помогите мне найти правильное решение для этого ..

Ответы [ 2 ]

0 голосов
/ 07 декабря 2011

Вот так

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

 }
}

Что касается отображения гиперссылки "edit", у меня будет дополнительный столбец рядом со столбцом "view" и будет скрываться или отображаться эта другая гиперссылка по мере необходимости, поскольку в некоторых случаяхвам понадобится один столбец гиперссылки, а в некоторых случаях вам понадобится два.

0 голосов
/ 07 декабря 2011

Сначала добавьте гиперссылку на удаление в свой ItemTemplate.

Затем, чтобы иметь возможность получить доступ к полю Status_id, вы захотите добавить его в DataKeys вашего GridView.

Затем вы можете подписаться на метод RowDataBound вашего GridView, получить гиперссылки, проверить 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; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...