пример - Могу ли я преобразовать логическое значение в Да / Нет в ASP.NET GridView




выделение строки (9)

У меня была такая же потребность, как и у оригинального плаката, за исключением того, что схема db моего клиента является нулевым битом (т. Е. Позволяет True / False / NULL). Вот код, который я написал, для отображения «Да / Нет» и обработки возможных значений нулей.

Code-Behind:

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

Внешний интерфейс:

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

У меня есть GridView ASP.NET с столбцом, сопоставленным с булевым. Я хочу показать «Да» / «Нет» вместо «Истина» / «Ложь». Ну на самом деле я хочу «Ja» / «Nej» (на датском языке).

Это возможно?

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

Нет, но вы можете использовать столбец шаблона:

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

Это работает:

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) - столбец столбца с булевым полем.


Вы можете использовать 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";
    }
}

Добавьте метод в свой класс страницы следующим образом:

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

И затем в своем TemplateField вы Bind этот метод:

<%# YesNo(Active) %>

Я использую этот код для VB:

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

И это должно работать для C # (untested):

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

Так я всегда это делал:

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

Надеюсь, это поможет.


Или вы можете использовать событие ItemDataBound в коде позади.


Экспериментируйте с атрибутами GridView, в частности, android:numColumns="auto_fit" и android:stretchMode . Для меня работает следующее:

<GridView 
    android:id="@+id/myGrid"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:columnWidth="60dp"
    android:stretchMode="columnWidth"    
    android:gravity="center"
/>




asp.net gridview