2014-02-21 6 views
0

У меня есть GridView на моей веб-странице. Который отображает данные с столбцами как Статус, имя, идентификатор и действие. Моя колонка статуса всегда заполнена тремя значениями (Complete, Queued и Ошибка) случайным образом.Создание ячеек кнопок гиперссылки в gridview с использованием C# asp.net

Теперь я хочу отобразить это значение столбца статуса как ссылку, если оно имеет значение «Сбой» или «Очередь». Но статус «Полный» не должен отображаться как ссылка.

Как я могу достичь этого дизайна во время работы?

Мой код для связывания данных в сетке,

protected void Page_Load(object sender, EventArgs e) 
    { 
     DataTable dtActionList = clsactionList.GetADActionList(); 
     grdADActionList.DataSource = dtActionList; 
     grdADActionList.DataBind(); 
    } 
    protected void grdADActionList_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     foreach (GridViewRow gvr in grdADActionList.Rows) 
     { 
      if ((gvr.FindControl("Label1") as Label).Text == "Completed") 
      { 
       (gvr.FindControl("Label1") as Label).Visible = true; 
       (gvr.FindControl("HyperLink1") as HyperLink).Visible = false; 
      } 
     } 
    } 

с помощью этого кода я просто связывании значения в сетке. Я не могу создать столбец «Статус» как ссылку на основе привязанных значений для этого столбца состояния.

Мой .aspx Кодекс:

<asp:GridView ID="grdADActionList" runat="server" Height="83px" Width="935px" AutoGenerateColumns="false" OnRowDataBound="grdADActionList_RowDataBound"> 

    <Columns> 
     <asp:TemplateField HeaderText="Status" SortExpression="Status"> 
      <ItemTemplate> 
       <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='http://localhost:52807/Default.aspx?'><%# Eval("Status") %> 
       </asp:HyperLink> 
       <asp:Label ID="Label1" runat="server" Text="<%# Container.DataItem %>" Visible="False"></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:BoundField DataField="GivenName" HeaderText="GivenName"/> 

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

+0

Как выглядит разметка для 'grdActionList'? – Andrei

+0

@Andrei: Вы имеете в виду дизайн сетки? – Suryakavitha

+0

Да. Содержимое файла aspx, связанного с сеткой – Andrei

ответ

1

На GridViewDataBound случае, просто скрыть ссылку и отобразить простую этикетку, если значение полный.
ASP.NET:

<asp:TemplateField HeaderText="Status" SortExpression="Status"> 
    <ItemTemplate> 
     <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='your_url'> 
      <%# Eval("Status") %> 
     </asp:HyperLink> 
     <asp:Label ID="Label1" runat="server" Text="<%# Eval("Status") %>" Visible="False"></asp:Label> 
    </ItemTemplate> 
</asp:TemplateField> 

C#:

protected void onGridViewDataBound() 
{ 
    foreach(GridViewRow gvr in grd) 
     if((gvr.FindControl("Label1") as Label).Text.ToLower() == "complete") // Updated Line 
     { 
      (gvr.FindControl("Label1") as Label).Visible = true; 
      (gvr.FindControl("HyperLink1") as HyperLink).Visible = false; 
     } 
} 
+0

Я пробовал с вашим кодом, его создание гиперссылок для всего столбца и статус завершенности также отображается как ссылка – Suryakavitha

+0

У вас есть 'OnDataBound =" onGridViewDataBound "в вашем теге asp: GridView? Кроме того, он не будет запускать обработчик событий C# 'onGridViewDataBound()', который скрывает ссылку, если status = "completed". – P5Coder

+0

Да, у меня это в моем коде. Я отредактирую свой пост и обнов свой последний код ... Проблема в том, что событие OnDataRowBound не входит в условие if ((gvr.FindControl («Label1») в качестве метки) .Text == «Complete») – Suryakavitha

0

вы должны работать в файле проекта означает .aspx файл Вы должны использовать и

<asp:GridView ID="GridView1" runat="server" EnableModelValidation="True"> 
    <asp:TemplateField HeaderText="Hyperlink"> 
<ItemTemplate> 
    <asp:HyperLink ID="HyperLink1" runat="server" 
     NavigateUrl='<%# Eval("CODE", @"http://localhost/Test.aspx?code={0}") %>' 
     Text='link to code'> 
    </asp:HyperLink> 
</ItemTemplate> 

0

Вы можете поместить обработчик на RowDataBound события

protected void gw_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow)  
    { 

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

     string NavigateUrl = <....place your link here with DataRowView info> 

     e.Row.Attributes.Add("onclick", NavigateUrl); 
    } 
} 
0

На данный момент у вас есть столбцы автогенерируемая, поэтому сначала отключить эту функцию. Затем вам нужно определить каждый столбец как BoundField, так и для hypelink, принимая во внимание ваше состояние, лучший способ заключается в определении шаблона поля:

<asp:GridView ID="grdADActionList" runat="server" BorderStyle="Double" BorderWidth="3px" 
       Height="83px" Width="935px" 
       AutoGenerateColumns="false"> 
     <Columns> 
      <asp:BoundField DataField="Name" HeaderText="Name"/> 
      <asp:BoundField DataField="Action" HeaderText="Action"/> 
      <asp:BoundField DataField="Id" HeaderText="Id"/> 
      <asp:TemplateField HeaderText="Status"> 
       <ItemTemplate> 
        <asp:HyperLink runat="server" NavigateUrl="~/link/address" Text='<%# Eval("Status") %>' 
            Visible='<%# (int)Eval("Status") != 1 %>'/> 
        <asp:Label runat="server" Text='<%# Eval("Status") %>' 
           Visible='<%# (int)Eval("Status") == 1 %>'> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
</asp:GridView> 

Обратите внимание, что это всего лишь разновидность - вы не указали какие значения содержит столбец Status, поэтому я предположил, что это перечисление на основе int.

+0

Обратите внимание, что она четко указала ** Случайный столбец состояния всегда заполнен тремя значениями (завершено, в очереди и с ошибкой). ** – P5Coder

+0

@ P5Coder, ну, я понимаю, поскольку столбец может содержать одно из трех значений, в зависимости от какая гиперссылка показана или нет. Это неверно? – Andrei

+0

У нее автогенерация столбцов означает, что она явно не указала какие-либо 'url' этим ссылкам. Но я думаю, что гиперссылка снова будет зависеть от стоимости. – P5Coder

Смежные вопросы