Asp.net grdiview: могу ли я отформатировать элементы данных в шаблоне элемента? - PullRequest
2 голосов
/ 16 декабря 2010

у меня есть этот код в шаблоне элемента в виде сетки:

<%# DataBinder.Eval (Container.DataItem, "DiscountAmount")%>

Это десятичное значение, и оно показывает 20,300000000000, что технически правильно, но я бы предпочел показать 20,30 или 20,30, в зависимости от культуры.

Но я никогда не был большим поклонником gridviews, и DataBinder.Eval и Container.DataItem тоже не были хорошими друзьями, и я теряюсь в том, как его использовать.

у него есть специальный префикс (<% #), и когда я набираю что-то другое, то исходный код не годится, но изменение <% # на <% = или <%, похоже, тоже не работает?

Ответы [ 3 ]

3 голосов
/ 16 декабря 2010

Это также будет работать:

<%#= String.Format("{0, 0:N2}",DataBinder.Eval (Container.DataItem, "DiscountAmount"))%>

Редактировать : Я разделяю ваш дискомфорт с декларативным синтаксисом привязки данных. Вы можете выполнить то же самое в выделенном коде , вызвав событие RowDataBound и применив любые изменения, которые вы хотите внести, поскольку данные привязаны к GridViewRow.

Для этого вам нужно подключить событие в разметке, установив OnRowDataBound в качестве имени вашего обработчика события, что-то вроде этого:

<asp:GridView ID="InvoiceGrid" OnRowDataBound="InvoiceGrid_RowDataBound".....>

Затем вы создаете обработчик событий в коде с такой подписью:

protected void InvoiceGrid_RowDataBound(object sender, GridViewRowEventArgs e)

Первое, что вы делаете в обработчике событий, это проверяете тип GridViewRow типа:

if (e.Row.RowType == DataControlRowType.DataRow)....

Затем вы делаете любое форматирование, которое хотите.

Для людей, довольных декларативной разметкой, это может показаться обременительным. Но для людей, которым удобно писать код, вы можете сделать намного больше здесь, в коде позади.

3 голосов
/ 16 декабря 2010

Вы пробовали это?

<%= String.Format("{0:0,0.00}", DataBinder.Eval (Container.DataItem, "DiscountAmount"))%>

или просто

<%# DataBinder.Eval(Container.DataItem, "DiscountAmount", "{0:0,0.00}")

Дополнительные параметры формата вы можете прочитать в статье Формат строки для двойного .

2 голосов
/ 16 декабря 2010

Есть несколько способов ... некоторые из них указаны выше, а вот другой:

Text='<%# GetFormattedDiscount(Eval("DiscountAmount").ToString())%>' 

GetFormattedDiscout - это функция в вашем коде, где вы можете выполнить любое необходимое форматирование и вернуть егокак строка:

protected void GetFormattedDiscount(string amount){
return String.Format("{0:N2}",amount);
}

Даже это должно работать:

<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%#String.Format("{0:n2}",Eval("DiscountAmount")) %>'></asp:Label>
</ItemTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...