web-dev-qa-db-fra.com

Puis-je convertir un booléen en Oui/Non dans un ASP.NET GridView

J'ai un ASP.NET GridView avec une colonne mappée à un booléen. Je veux afficher "Oui"/"Non" au lieu de "Vrai"/"Faux". En fait, je veux "Ja"/"Nej" (en danois).

Est-ce possible? 

<asp:gridview id="GridView1" runat="server" autogeneratecolumns="false">
    <columns>
        ...
        <asp:boundfield headertext="Active" datafield="Active" dataformatstring="{0:Yes/No}" />
        ...
    </columns>
</asp:gridview>
59
Thomas Jespersen

J'utilise ce code pour VB:

<asp:TemplateField HeaderText="Active" SortExpression="Active">
    <ItemTemplate><%#IIf(Boolean.Parse(Eval("Active").ToString()), "Yes", "No")%></ItemTemplate>
</asp:TemplateField>

Et cela devrait fonctionner pour C # (non testé):

<asp:TemplateField HeaderText="Active" SortExpression="Active">
    <ItemTemplate><%# (Boolean.Parse(Eval("Active").ToString())) ? "Yes" : "No" %></ItemTemplate>
</asp:TemplateField>
122
travis

Ajoutez une méthode à votre classe de page comme ceci:

public string YesNo(bool active) 
{
  return active ? "Yes" : "No";
}

Et puis dans votre TemplateField vous Bind en utilisant cette méthode:

<%# YesNo(Active) %>
14
Rune Grimstad

Non, mais vous pouvez utiliser une colonne de modèle:

<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>
7
Mark Brackett

Vous pourriez utiliser 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";
    }
}
6
Corey Coto

Ou vous pouvez utiliser l'événement ItemDataBound dans le code derrière.

3
Paco

J'avais le même besoin que l'affiche d'origine, sauf que le schéma de base de données de mon client est un bit nullable (c'est-à-dire qu'il autorise True/False/NULL) Voici un code que j'ai écrit à la fois pour afficher Oui/Non et gérer les valeurs NULL potentielles.

Code-Behind:

public string ConvertNullableBoolToYesNo(object pBool)
{
    if (pBool != null)
    {
        return (bool)pBool ? "Yes" : "No";
    }
    else
    {
        return "No";
    }
}

L'extrémité avant:

<%# ConvertNullableBoolToYesNo(Eval("YOUR_FIELD"))%>
2
Shaun3180

Voici comment je l'ai toujours fait:

<ItemTemplate>
  <%# Boolean.Parse(Eval("Active").ToString()) ? "Yes" : "No" %>
</ItemTemplate>

J'espère que cela pourra aider.

1
Chtiwi Malek

Cela marche:

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

cells(3) est la colonne de la colonne contenant le champ booléen.

0
joeysasa

C'est facile avec Format () - Fonction

Format(aBoolean, "YES/NO")

Veuillez trouver les détails ici: https://msdn.Microsoft.com/en-us/library/aa241719(v=vs.60).aspx

0
SabineMueller