2009-11-13 2 views
0

Я поместил гиперссылку в gridview, но иногда понимаю, что хочу, чтобы он был кликабельным, а иногда и нет, в зависимости от данных.Условное гиперссылки в gridview? ASP.net

Если элемент A или B, мне нужна гиперссылка на bibble.aspx? Id = 123, в противном случае я просто хочу простой текст.

Каков наилучший способ? Должен ли я использовать для этого другой тип поля?

ответ

1

Возможно, вам лучше с помощью поля шаблона и управления гиперссылкой, с помощью NavigateUrl, определяемого тернарным оператором.

0

Вам необходимо обработать событие RowDataBound вашего GridView.

В этом документе link показано, как использовать событие RowDataBound для изменения значения поля в источнике данных до его отображения в элементе управления GridView.

+0

Да, я только что сделал это и собираюсь добавить гиперссылку ... единственная проблема теперь я просто ударил, как получить идентификатор для добавления в гиперссылку url. Он не отображается как поле (хотя он составляет часть гиперссылки в другом поле), хотя он возвращается в источник данных. Как я могу извлечь его в коде? Обычно я просто использовал свойство datakeyname. Это может быть очевидно, я все еще новичок в gridviews, D – NibblyPig

+0

Я был на обед - похоже, что вы получили свое решение тем временем :) – JohnIdol

3
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" 
    onrowdatabound="GridView1_RowDataBound"> 
    <Columns> 
     <asp:TemplateField HeaderText="Column to check"> 
      <ItemTemplate> 
       <asp:Label runat="server" ID="lblCrtl" Text='<%# Eval("Name") %>' /> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Column Name"> 

     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 



protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // you may need to do this if you didnt use templatefield; 
     // string val = e.Row.Cells[<column index>].Text; 
     // if its templatefield do following; 
     Label lbl = e.Row.FindControl("lblCrtl") as Label; 

     Button btn = null; 

     if (lbl.Text == "Car") // put your own value to check, my case it was Car 
     { 
      btn = new Button(); 
      btn.Text = "Test"; 
      e.Row.Cells[1].Controls.Add(btn); // cells<column index that control will be added> 
     } 
    } 
} 
+0

Я пробовал что-то похожее на это, с шаблоном, но почему-то e.Row .Cells [7] .Text is "", который не может быть прав ... – NibblyPig

+0

Если вы использовали шаблон, вы не можете получить доступ к элементу управления, например, e.Row.Cells [7] .Text, вы скорее используете e.Row.FindControls ("ctrlID"); и использовать его свойства в зависимости от того, какой контроль вы использовали. – Cem

+0

Спасибо, проблема в том, что я хочу либо метку, либо гиперссылку. Так что я должен поместить метку в поле шаблона, затем в код, удалить ее и добавить гиперссылку? Также не дал бы ему идентификатор вызвать более одного ярлыка с тем же идентификатором на странице? – NibblyPig

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