【问题标题】:Listview align currency on decimal poitListview在小数点上对齐货币
【发布时间】:2013-01-01 06:08:14
【问题描述】:

在 Asp.net 中,我有一个列表视图,其中有一个名为“金额”的列。负数显示为 (111.111),正数显示为 111.11。如何右对齐十进制的数字?如果没有任何括号,那将很容易。但是,这是一项要求。

谢谢

【问题讨论】:

  • 你是说仅仅右对齐列还不够好?您需要将111.11 值填充到数字与(111.111) 值完美对齐的位置吗?
  • 这里有一个堆栈帖子解决了这个问题:stackoverflow.com/questions/2332912/…
  • 是的。我正在尝试将 (111.11) 与小数点上的 111.11 对齐。不知道如何在 Listview 中执行此操作。

标签: asp.net


【解决方案1】:

当数字为非负数时,括号的颜色与背景相同。右对齐。

   <asp:ListView ID="MainListView" runat="server">
        <LayoutTemplate>
            <table style="text-align:right;">
                <tr id="ItemPlaceholder" runat="server" />
            </table>
        </LayoutTemplate>
        <ItemTemplate>
            <tr>
                <td>
                    <span runat="server" style='<%# GetStyle() %>'>(</span>
                    <%# Eval("Item") %>
                    <span runat="server" style='<%# GetStyle() %>'>)</span>
                </td>
            </tr>
        </ItemTemplate>
    </asp:ListView>

    protected void Page_Load(object sender, EventArgs e)
    {
        var values = new[] { 
            new { Item = 123.12},
            new { Item = -133.34}
        };

        MainListView.DataSource = values;
        MainListView.DataBind();
    }

    protected string GetStyle()
    {
        if ((double)Eval("Item") < 0)
            return string.Empty;
        else
            return "color: white;";
    }

【讨论】:

【解决方案2】:

这会很棘手。

我可以想到两种方法来解决这个问题。

  1. 将值分成两列。右对齐包含小数点前任何内容的第一列。左对齐包含小数点和任何尾随数字的第二列。这样做的缺点是它位于两个不同的单元格中,这意味着您不能简单地双击内容进行复制和粘贴等。

  2. 使用Graphics.MeasureString 准确计算需要在列上放置多少像素。

【讨论】:

  • 如何确定列表视图项是否为正数以便我可以添加填充?是否有我可以在 itembound 期间使用的 If 语句?
  • 是的,您可以在ListViewItemDataBound 事件期间检查。查看这篇文章以获得进一步的解释:Get Data Value From ListView ItemDataBound
猜你喜欢
  • 2023-04-04
  • 2014-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 2016-04-20
  • 1970-01-01
  • 1970-01-01
  • 2015-03-15
相关资源
最近更新 更多