Когда лучше всего вызывать функцию для изменения данных, возвращаемых из базы данных - PullRequest
0 голосов
/ 28 июня 2009

У меня есть две функции, написанные на VB.NET:

1) Первая функция (назовите ее GetValues ​​()) возвращает значения в базе данных SQL в виде списка через сохраненный процесс. Одним из полей является DateTimeSubmitted. Все эти данные отображаются на моей веб-странице с помощью повторителя. Работает нормально.

2) Вторая функция (назовите ее NiceDate ()), которую я создал, чтобы изменить DateTimeSubmitted на хорошую дату, например, «одну минуту назад» или «вчера».

Моя проблема в том, что я понятия не имею, что является лучшей частью процесса для выполнения преобразования (в момент извлечения данных или загрузки страницы и т. Д.) Или на самом деле, как выполнить преобразование.

Я пробовал несколько вещей при загрузке страницы и начал смотреть на преобразование с циклом FOR EACH, но пока без кубиков.

Я на правильном пути или есть более легкий путь?

Ответы [ 4 ]

3 голосов
/ 28 июня 2009

Вы можете обработать событие повторителя ItemDataBound . Оттуда вы будете использовать FindControl, чтобы получить элемент управления (возможно, метку?) И соответствующим образом обновить его, используя логику NiceDate ().

Аналогично коду из приведенной выше ссылки, вы можете сделать что-то вроде:

РЕДАКТИРОВАТЬ: обновлен до VB.NET

Sub myRepeater_ItemDataBound(Sender As Object, e As RepeaterItemEventArgs)
    ' This event is raised for the header, the footer, separators, and items.

    ' Check the type: operate on Items and Alternating Items only.
    If (e.Item.ItemType = ListItemType.Item) Or (e.Item.ItemType = ListItemType.AlternatingItem) Then
        ' Get a reference to the date label then update its value
        Dim lblDate As Label = CType(e.Item.FindControl("lblDate"), Label)
        lblDate.Text = NiceDate(lblDate.Text)
    End If
End Sub
1 голос
/ 28 июня 2009

Если вы используете .Net 3.5 и если в любом случае вы используете привязку для отображения значений базы данных в элементах пользовательского интерфейса, вы можете создать «Конвертеры». Это сделано только для этой цели или даже если вы не хотите создавать конвертер, и если вы используете класс свойств, вы можете конвертировать его до того, как свойство получит операторы.

1 голос
/ 28 июня 2009

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

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

1 голос
/ 28 июня 2009

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DT
{
    class Program
    {
        static void Main(string[] args)
        {
            var dt1 = DateTime.Now - TimeSpan.FromDays(1);
            var dt2 = DateTime.Now - TimeSpan.FromHours(2);
            var dt3 = DateTime.Now - TimeSpan.FromMinutes(10);

            Console.WriteLine(FriendlyDate(dt1));
            Console.WriteLine(FriendlyDate(dt2));
            Console.WriteLine(FriendlyDate(dt3));

            Console.ReadLine();
        }

        private static string FriendlyDate(DateTime dt)
        {
            var cur = DateTime.Now;
            var ts = cur - dt;

            return FriendlyDate(ts);
        }

        private static string FriendlyDate(TimeSpan ts)
        {
            string retVal = String.Empty;

            if (ts.Days > 0)
            {
                retVal = String.Format("{0} day(s) ago.", ts.Days);
            }
            else if (ts.Hours > 0)
            {
                retVal = String.Format("{0} hours(s) ago.", ts.Hours);
            }
            else
            {
                retVal = String.Format("{0} minute(s) ago.", ts.Minutes);
            }

            return retVal;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...