从Code-Behind更改ItemTemplate中asp:TextBox的数字格式

时间:2015-07-10 18:20:03

标签: c# asp.net numbers format itemtemplate

我需要动态更改itemTemplate中文本框的'数字格式'。我没有尝试过任何工作,我会很感激一些想法。

原始代码的一个非常简化的版本是:

<asp:GridView ID="gv1">
  <Columns>
    <asp:TemplateField HeaderText="Xfer From">
      <ItemTemplate>
        <asp:TextBox ID="txtTransferFrom" runat="server" Text='<%# Bind ("FundValueTransferFrom", "{0:0.00}") %>' />
        <asp:RangeValidator ID="val1" runat="server" ControlToValidate="txtTransferFrom" Type="Currency" />
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>

请注意小数格式(“{0:0.00}”)和绑定字段的货币类型。

现在我需要做的是,根据此页面上单选按钮的设置,更改格式化。在一个州,它需要是两位小数的货币;在另一方面,它必须是小数点后三位的百分比。

这听起来很简单,但我不能让它发挥作用。理想情况下,我想在'radioButton_SelectedIndexChanged'方法中放入一些代码,但我似乎无法从那里访问该格式。

我还尝试在ASPX页面上的内联代码(&lt; %%&gt;)中使用“if”语句,但它不响应单选按钮的更改。我必须提到这个网格在更新面板中......我试着调用 UP.Update(),但它不能解决问题。我确实从ASPX页面中删除了初始格式,这样它就不会干扰 - 没有。

一个解决方案可能是在代码隐藏中格式化数字字符串,但我不能 - 网格绑定到一个对象,其字段是“双”而不是字符串...转换为字符串正在发生隐含在数据绑定中。

有没有人有其他方法我可能尝试以编程方式切换此格式?提前感谢任何见解!

1 个答案:

答案 0 :(得分:0)

Dacker,你的评论让我走上了回答的好路 - 非常感谢!我还有其他问题要处理,但下面的代码似乎正在解决这个直接问题。

在ASPX(缩写标签)中:

<asp:TextBox ID="txtTransferFrom" ... " Text='<%# Eval("FundValueTransferFrom") != null ? GetFormattedString((double)Eval("FundValueTransferFrom")) : Eval("FundValueTransferFrom") %>' ...">

在代码隐藏中:

public string GetFormattedString(double val)
        {
            string newVal;
            if (rblFtmp1.Text == DOLLAR)
            {
                newVal = String.Format("{0:0.00}", val);
            }
            else // If not DOLLAR then it's PERCENT
            {
                newVal = String.Format("{0:0.000}", val);
            }
            return newVal;
        }