Формат столбцов для ASP.Net GridView на основе типа данных - PullRequest
1 голос
/ 30 октября 2008

У меня есть очень простая страница ASP.Net, которая выступает в качестве внешнего интерфейса для хранимой процедуры. Он просто запускает процедуру и показывает вывод с использованием элемента управления gridview: менее 40 строк всего кода, включая разметку aspx. Сама хранимая процедура очень ... изменчива. Он используется для ряда целей, и формат вывода регулярно меняется.

Все это прекрасно работает, потому что элементу управления gridview на самом деле не нужно заботиться о том, какие столбцы возвращает хранимая процедура: он просто показывает их на странице, а это именно то, что мне нужно.

Тем не менее, база данных, с которой она работает, имеет множество столбцов даты и времени повсюду, где доля времени не очень важна - она ​​всегда обнуляется. Я хотел бы иметь возможность управлять форматированием только столбцов даты и времени в виде сетки, даже не зная точно, какими будут эти столбцы. Каждый раз, когда столбец в результатах имеет тип datetime, просто примените заданную строку формата, которая обрежет компонент времени.

Я знаю, что могу преобразовать в varchar в базе данных, но я бы действительно не хотел, чтобы разработчики заботились о форматировании в запросе, и в любом случае это относится к уровню представления. Есть другие идеи?


Наконец-то все заработало приемлемым (или хотя бы улучшенным) способом, используя этот код:

Protected Sub OnRowDatabound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim d As DateTime
        For Each cell As TableCell In e.Row.Cells
            If Date.TryParse(cell.Text, d) AndAlso d.TimeOfDay.Ticks = 0 Then
                cell.Text = d.ToShortDateString()
            End If
        Next cell
    End If
End Sub

Ответы [ 3 ]

2 голосов
/ 30 октября 2008

Если вы автоматически генерируете столбцы, которые звучат так, как вы. Порядок использования форматирования сеток ужасный.

Вам нужно было бы перебрать все столбцы таблицы, вероятно, в событии с привязкой к данным, и применить выражение форматирования к любому столбцу, который вы считаете столбцом даты.

Если вы не генерируете автоматически, и у вас есть столбцы кодирования в вашей сетке, вы также будете знать, какие столбцы являются столбцами даты, и вы можете применить то же выражение формата к этому столбцу. Это что-то вроде {0: ddMMyyyy}, но вам придется поискать это, поскольку это, вероятно, не совсем правильно.

чтобы подвести итог крюка в событие с привязкой к данным. цикл по коллекции столбцов и выяснить, является ли столбец столбцом даты. Интересно, как вы могли бы сделать это :). Если вы решили, что столбец является столбцом даты, установите его форматное выражение.

Voila

---------------------- EDIT

Хорошо, как насчет того, чтобы написать вам метод, который возвращает данные из процедуры для возврата данных. Вы можете привязать данные к вашей сетке после форматирования данных в таблице данных. Коллекция datatable.Columns представляет собой совокупность DataColumns, и они имеют свойство DataType. Возможно, вы ищете System.DateTime или DateTime, и это может быть одним из свойств самого свойства DataType :). Я знаю, что это громоздко, но то, что вы спрашиваете, определенно будет громоздким. После того, как вы определили столбцы даты, вы можете что-то с этим сделать.

Если нет, я бы начал смотреть на устройства для чтения данных и посмотреть, можно ли там что-нибудь сделать или использовать адаптеры данных. Хотел бы я дать вам правильный ответ, но думаю, что вам удастся это сделать, это не будет красиво. К сожалению

2 голосов
/ 30 октября 2008

, если использование явных связанных столбцов является опцией, добавьте DataFormatString в boundField

<asp:BoundField DataField="Whatever" ... DataFormatString="{0:dd/MM/yyyy}" HtmlEncode="False"/ > 

в противном случае вы можете посмотреть на форматирование события GridView.OnRowDataBound

0 голосов
/ 30 октября 2008

Вы можете использовать функцию isDate (), чтобы проверить, является ли что-то действительной датой, а затем использовать параметры форматирования даты, чтобы она выглядела так, как вы хотите.

Некоторые примеры форматирования даты: http://datawebcontrols.com/faqs/CustomizingAppearance/FormatDateTimeData.shtml

...