Posso convertire un valore booleano in Sì / No in un ASP.NET GridView
Domanda
Ho un ASP.NET GridView
con una colonna mappata su un valore booleano. Voglio visualizzare " Sì " / " No " invece di " True " / " False " ;. Bene, in realtà voglio "Ja", "Nej". (in danese).
È possibile?
<asp:gridview id="GridView1" runat="server" autogeneratecolumns="false">
<columns>
...
<asp:boundfield headertext="Active" datafield="Active" dataformatstring="{0:Yes/No}" />
...
</columns>
</asp:gridview>
Soluzione
Uso questo codice per VB:
<asp:TemplateField HeaderText="Active" SortExpression="Active">
<ItemTemplate><%#IIf(Boolean.Parse(Eval("Active").ToString()), "Yes", "No")%></ItemTemplate>
</asp:TemplateField>
E questo dovrebbe funzionare per C # (non testato):
<asp:TemplateField HeaderText="Active" SortExpression="Active">
<ItemTemplate><%# (Boolean.Parse(Eval("Active").ToString())) ? "Yes" : "No" %></ItemTemplate>
</asp:TemplateField>
Altri suggerimenti
Aggiungi un metodo alla tua classe di pagine in questo modo:
public string YesNo(bool active)
{
return active ? "Yes" : "No";
}
E poi nel tuo TemplateField
tu Bind
usando questo metodo:
<%# YesNo(Active) %>
No - ma potresti usare una colonna template:
<script runat="server">
TResult Eval<T, TResult>(string field, Func<T, TResult> converter) {
object o = DataBinder.Eval(Container.DataItem, field);
if (converter == null) {
return (TResult)o;
}
return converter((T)o);
}
</script>
<asp:TemplateField>
<ItemTemplate>
<%# Eval<bool, string>("Active", b => b ? "Yes" : "No") %>
</ItemTemplate>
</asp:TemplateField>
Puoi usare un Mixin.
/// <summary>
/// Adds "mixins" to the Boolean class.
/// </summary>
public static class BooleanMixins
{
/// <summary>
/// Converts the value of this instance to its equivalent string representation (either "Yes" or "No").
/// </summary>
/// <param name="boolean"></param>
/// <returns>string</returns>
public static string ToYesNoString(this Boolean boolean)
{
return boolean ? "Yes" : "No";
}
}
Oppure puoi usare l'evento ItemDataBound
nel codice dietro.
Avevo la stessa necessità del poster originale, tranne per il fatto che lo schema db del mio cliente è un bit nullable (cioè, consente True / False / NULL). Ecco un po 'di codice che ho scritto sia per visualizzare Sì / No sia per gestire potenziali null.
codice sottostante:
public string ConvertNullableBoolToYesNo(object pBool)
{
if (pBool != null)
{
return (bool)pBool ? "Yes" : "No";
}
else
{
return "No";
}
}
Front-End:
<%# ConvertNullableBoolToYesNo(Eval("YOUR_FIELD"))%>
Ecco come l'ho sempre fatto:
<ItemTemplate>
<%# Boolean.Parse(Eval("Active").ToString()) ? "Yes" : "No" %>
</ItemTemplate>
Spero che sia d'aiuto.
Funziona:
Protected Sub grid_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grid.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
If e.Row.Cells(3).Text = "True" Then
e.Row.Cells(3).Text = "Si"
Else
e.Row.Cells(3).Text = "No"
End If
End If
End Sub
Dove celle (3)
è la colonna della colonna che ha il campo booleano.
È facile con Format () - Function
Format(aBoolean, "YES/NO")
Trova i dettagli qui: https://msdn.microsoft.com/en -us / library / aa241719 (v = vs.60) aspx