2016-10-12 3 views
0

Проблема заключается в следующем:C# DataGridView: Как отображать десятичного столбец из источника данных в качестве колонки TimeSpan в DataGridView

У меня есть DataGridView (DGV) с «N» колонны, «Источник данных таблицы» (DSt), на которые ссылается этот DGV и «панель поиска» (sB) с таким же количеством слотов, что и столбцы в DGW. Каждый слот фильтрует свой столбец.

Существует один TimeSpan - столбец «Duration» в DGV, который дает мне проблемы. Я хочу, чтобы иметь возможность фильтровать его, введя десятичные критерии в относительный слот в sB.

Как, например, если я хочу найти записи с длительностью более 1 часа 32 минуты 40 секунд, я бы набрал «> (1 + 32/60 + 40/3600)» в слот, и было бы легко перенести в DataView RowFilter (просто добавьте имя столбца в начале).

Проблема заключается в том, что существует формат «hh: mm: ss» этого столбца TimeSpan и единственный способ его фильтрации, который я вижу, сделав выбор через Linq, получив Dataview из этого выбора и переключив существующие Datasourse к этому DataView:

EnumerableRowCollection<DataRow> query=from order in myDataSourceTable.AsEnumerable() 
         where order.Field<TimeSpan>("Duration").Seconds > (1*3600+32*60+40) 
         select order; 
    DataView daView = query.AsDataView(); 
    myDataGridView.DataSource = daView; 

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

На данный момент я могу представить себе два решения этой:

    • , чтобы добавить столбец с теми же номерами, что и в колонке TimeSpan, но в десятичной форме в моей DS и скрыть его в DGV. Затем я применил бы фильтр, предназначенный для столбца TimeSpan, для этого скрытого столбца. Очевидно, что это не очень эффективно.
    • сделать некоторые трюк, который мы все видели в EXCEL, где вы можете фильтровать через DateDime значения, используя целые числа и десятичные. Я надеюсь узнать, как это сделать.

Так что мой вопрос:

Может DS с десятичной munbers будет отображаться на DGV как числа TimeSpan таким образом, что DS сохранит оригинальный формат десятичного?

ответ

0
DurationTimeSpanDataGridViewColumn.DefaultCellStyle.Format = "ss\\.fffff"; 

см

https://msdn.microsoft.com/en-us/library/f9x2790s(v=vs.110).aspx и https://msdn.microsoft.com/en-us/library/ee372287(v=vs.110).aspx

EDIT: OK, попробуйте

private void DGV_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    if (e.ColumnIndex == DurationTimeSpanDataGridViewColumn.Index) 
    { 
     if (e.Value != null) 
     { 
      e.Value = TimeSpan.Parse(e.Value as string).ToString("ss\\.fffff"); 
      e.FormattingApplied = true; 
     } 
    } 
} 
+0

Спасибо за ваш комментарий, но как я толстая или это не работает. Если я правильно понял, вы упомянули DefaultCellStyle как способ автоматического преобразования формата данных, полученных от источника данных. Но насколько я понял, это свойство фактически устанавливает формат ячейки по умолчанию при создании пустого DataGridView. В моем случае все форматы данных были импортированы из моего DataSourse, поэтому я не могу вручную изменить уже существующие форматы. Я могу это сделать, только изменив свой DataSource, но это то, чего я пытаюсь избежать. – SpookySpoon