【问题标题】:Can I convert a boolean to Yes/No in a ASP.NET GridView我可以在 ASP.NET GridView 中将布尔值转换为是/否吗
【发布时间】:2010-09-18 00:37:36
【问题描述】:

我有一个 ASP.NET GridView,其中有一列映射到布尔值。我想显示“是”/“否”而不是“真”/“假”。好吧,实际上我想要“Ja”/“Nej”(丹麦语)。

这可能吗?

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

【问题讨论】:

    标签: asp.net gridview


    【解决方案1】:

    不,但您可以使用模板列:

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

    【讨论】:

      【解决方案2】:

      或者你可以在后面的代码中使用ItemDataBound事件。

      【讨论】:

      • 如果你能写个例子sn-p对他有帮助。
      【解决方案3】:

      我将此代码用于 VB:

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

      这应该适用于 C#(未经测试):

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

      【讨论】:

      • 谢谢! ☺ 实际上,我将此问题标记为最喜欢的问题,以便我可以参考(例如复制/粘贴)那些 sn-ps。
      • 我稍微调整了这段代码。我能够将其缩短为... ((bool)Eval("Active")) ? “是”:“否”同样的想法。谢谢。
      • 谢谢!我最终得到了转发器中的数据绑定可为空的布尔值:
      • 我建议投票给 visualstudio.uservoice.com/forums/121579-visual-studio-2015/… 来解决这个问题,然后 DataStringFormat 就可以工作,你就不必使用项目模板
      • 缩短 VB 版本:If(CBool​​(Eval("Active")), "Yes", "No")
      【解决方案4】:

      像这样向你的页面类添加一个方法:

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

      然后在你的TemplateFieldBind使用这个方法:

      <%# YesNo(Active) %>
      

      【讨论】:

      • 我认为模板字段绑定应该是这样的:
      【解决方案5】:

      你可以使用 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】:

      除了我的客户的 db 模式是一个可为空的位(即,允许 True/False/NULL)之外,我的需求与原始海报相同。这是我编写的一些代码,用于显示是/否和处理潜在的空值。

      代码隐藏:

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

      前端:

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

      【讨论】:

      • Downwote:你不应该在正常的编程逻辑中使用异常。而是尝试 if(pBool.HasValue) return "No";否则返回 (bool)pBool ? “是”:“否”;这假设您的参数类型是 bool?,它应该是。
      • @thomas-jespersen 你是对的——我最初的例子使用了一些糟糕的编程风格,所以我修复了代码来测试空值而不使用 try/catch 语句。我将不胜感激!
      • 我同意上面的 TJ,但我们是来学习的。你的代码现在很好,所以赞成。 :)
      • 为什么不使用公共字符串ConvertNullableBoolToYesNo(bool? pBool){ return (pBool.HasValue &amp;&amp; pBool.Value) ? "Yes" : "No";}
      • 除非参数是布尔值,或者可以强制转换为布尔值,否则代码仍然会抛出 InvalidCastException。最好将其更改为布尔值?就像@ThomasJespersen 说的那样。
      【解决方案7】:

      这行得通:

      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) 是具有布尔字段的列的列。

      【讨论】:

        【解决方案8】:

        这就是我一直这样做的方式:

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

        希望对您有所帮助。

        【讨论】:

          【解决方案9】:

          使用 Format()-Function 很容易

          Format(aBoolean, "YES/NO")
          

          请在此处找到详细信息: https://msdn.microsoft.com/en-us/library/aa241719(v=vs.60).aspx

          【讨论】:

            猜你喜欢
            • 2012-09-22
            • 2011-01-28
            • 1970-01-01
            • 2016-07-17
            • 2013-09-02
            • 2011-02-21
            • 2014-08-13
            • 1970-01-01
            • 2012-02-13
            相关资源
            最近更新 更多