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 № 1Sie 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.