/ / Bedingtes Hyperlinkfeld in einer Gridview? ASP.net - asp.net, Gridview

Bedingtes Hyperlinkfeld in einer Gridview? ASP.net - asp.net, Gridview

Ich habe ein Hyperlinkfeld in eine Gridview eingefügt, aber manchmal ist mir klar, dass es klickbar sein soll und manchmal nicht, je nach Daten.

Wenn das Element A oder B ist, möchte ich einen Hyperlink zu bibble.aspx? Id = 123, sonst möchte ich nur einfachen Text.

Was ist der beste Weg? Soll ich eine andere Art von Feld dafür verwenden?

Antworten:

1 für die Antwort № 1

Sie sind wahrscheinlich besser mit einem Template-Feld und einem Hyperlink-Steuerelement, mit der NavigateUrl von einem ternären Operator bestimmt.


3 für die Antwort № 2
<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 für die Antwort № 3

Sie müssen das RowDataBound-Ereignis Ihrer GridView behandeln.

Dies Verknüpfung zeigt, wie mit dem RowDataBound-Ereignis der Wert eines Felds in der Datenquelle vor der Anzeige in einem GridView-Steuerelement geändert wird.