2015-07-10 2 views
0

Мне нужно динамически изменять «формат номера» текстового поля, находящегося внутри элемента itemTemplate. Ничто из того, что я пробовал, не работает, и я был бы признателен за некоторые идеи.Изменение формата форматирования asp: TextBox в ItemTemplate из Code-Behind

очень упрощенная версия оригинального кода заключается в следующем:

<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, но я не могу получить доступ к этому форматированию.

Я также попытался использовать оператор «if» в встроенном коде (<%%>) на странице ASPX, но он не отвечает на изменение переключателей. Я должен упомянуть, что эта сетка находится внутри панели обновления ... Я попытался позвонить UP.Update(), но это не устраняет проблему. Я удалил исходное форматирование со страницы ASPX, чтобы он не мешал - ничего.

Одним из решений могло быть форматирование числовых строк в коде, но я не могу - сетка привязана к объекту, поля которого «удваиваются», а не строки ... преобразование в строки что происходит неявно в привязке данных.

У меня нет другого подхода, я мог бы попытаться включить это форматирование программно? Заранее благодарим за проницательность!

+0

Почему бы не использовать текст = '<% # ((YourDataType) Container.DataItem). FundValueTransferFrom.ToString ("0.00")%> '? И для вашего формата используйте метод: Text = "<% # GetMyAmountInMyFormat ((YourDataType) Container.DataItem)%>" – Dacker

+0

Спасибо за ответ. Я не уверен, что полностью понимаю. Когда я пытаюсь использовать что-то вроде того, что у вас есть, IntelliSense недовольна этим. Я также попытался просто преобразовать строку формата в переменную, которую я мог бы извлечь из кода, например: Текст = '<% # Bind ("FundValueTransferTo", "{0: 0.00}")%>' И в коде-за: приватная строка _numForm = @ "{0: 0.00}"; public string NumFormat {get {return_numForm; }} Но это сбой с «неправильным форматом». – AlanTK

+0

Я думаю, что Intellisense имеет проблемы из-за одинарной кавычки для атрибута текста. Если вы выполните Text = "<% # GetMyAmountInMyFormat ((YourDataType) Container.DataItem)%>" и поместите всю логику в метод GetMyAmountInMyFormat intellisense не будет проблем.Intellisense - это не самая важная вещь, но вам нужно будет найти баланс между логикой в ​​разметке и кодом для удобства чтения и обслуживания. – Dacker

ответ

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