2010-09-13 5 views
0

Мне нужно отформатировать строку («00: 10: 08: 10») в (10 недель 08 дней 10 часов). Поэтому я использовал конвертер и добавил его с привязкой datagrid. Мой код:с использованием преобразователей

Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert 
    Dim strList(4) As String 
    Dim prefixList() As String = {"Wk", "Dy", "Hrs", "Min"} 
    Dim input As String = value.ToString 
    Dim Output As String = String.Empty 
    If input <> String.Empty Then 
     strList = input.Split(":") 
     Dim itr As Integer 
     For Each Str As String In strList 
      If Integer.Parse(Str) <> 0 Then 
       Output += Str + " " + prefixList(itr) + " " 
      End If 
      itr += 1 
     Next 
    End If 
    Return Output 
End Function 

Я получаю конвертацию, но когда я изменить данные, конвертер вызывается снова, где я бы не старый формат («00: 10: 08: 10»), а вместо этого ИТС (10 Dy 08 Hr 10 мин). поэтому преобразователь не работает. Как я могу заставить его работать?

Дополнительно: И есть тип данных в mssql для представления моих данных в днях и часах, поэтому я не буду использовать этот строковый формат.

+0

Ваш код может работать с входом «00: 10: 00: 20» - и это будет 20 минут или 10 недель справа? –

+0

Rowland: почему это будет бороться? его 20 минут, очевидно. – sarath

ответ

1

Вам необходимо реализовать функцию ConvertBack в вашем ValueConverter для преобразования от 10 Dy 08 Hr 10 Min в 00:10:08:10.

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

Для хранения данных вы можете использовать timespan. Он хранит длительность или продолжительность.

1

Дополнительная информация: Я всегда использую временные метки (миллисекунды с 01.01.1970) при хранении в sql. Они очень просты в сортировке и могут быть проанализированы на и из объекта DateTime (или аналогичного) почти на каждом языке программирования.

+0

Но как мне будет соответствовать мое требование? Я должен представить крайний срок для конкретной задачи. так как я могу использовать временную метку для публикации 10 недель/3 дней? – sarath

+0

Разве вы не имели в виду промежуток времени? –

+0

Если ваш крайний срок будет статичным (например, укажите конкретную дату), вы можете сохранить эту дату как временную метку. Затем преобразуйте его обратно в DateTime и вычтите из него DateTime.Now(). Это дает вам оставшееся время. Вы также можете преобразовать DateTime.Now() в метку времени и вычесть ее из временной метки времени, чтобы получить разницу в миллисекундах. –

Смежные вопросы