Привязка столбцов DB2 (iSeries) DATE / TIME / TIMESTAMP к WinForms DataGridView - PullRequest
1 голос
/ 06 октября 2010

Я пытаюсь вернуть содержимое файла AS / 400 обратно в привязанный к данным .NET WinForms DataGridView (VS 2010).Сам запрос не является проблемой, и я могу связать все, используя свойство DataSource сетки.Данные возвращаются без проблем.

Проблема, с которой я я сталкиваюсь, заключается в том, что все поля даты / времени возвращаются как строковые литералы, что делает невозможной сортировку.Более того, он возвращается с использованием наших стандартных форматов AS / 400 (гггг-дд-мм и чч.мм.сс).Я хотел бы, чтобы они возвращались как настоящие поля даты / времени, чтобы их можно было сортировать, и я мог контролировать формат вывода (я бы предпочел MM / dd / yyyy и чч: мм: сс AMPM).Я попытался объединить два поля в одно с использованием формата TIMESTAMP, но это просто дало мне объединенную строку.

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

Кто-нибудь может предложить что-нибудь?Спасибо!

РЕДАКТИРОВАТЬ: Пример кода.SQL для запроса значений (с измененными именами для защиты невинных):

SELECT MYDATE, MYTIME, TIMESTAMP(MYDATE, MYTIME)
FROM   LIBNAME.FILENAME
WHERE  <blah blah blah>

SQL-запрос записывается в DataTable с помощью команды OleDbDataAdapter.Fill.

Dim myTable as New DataTable
Using adapter As New OleDbDataAdapter
    adapter.SelectCommand = New OleDbCommand(<sql statement>, <AS/400 Connection>)
    adapter.Fill(myTable)
    Return myTable
End Using

DataTable получаетвстроенный в DataGridView:

grid.DataSource = FunctionCallToGrabTheDataAbove

Довольно просто (и пытается сохранить это таким образом, если это возможно)

Ответы [ 3 ]

2 голосов
/ 14 февраля 2012

Попробуйте следующее:

SELECT MYDATE, 
       MYTIME, 
       TIMESTAMP(CHAR(MYDATE,ISO)||'-'||CHAR(MYTIME,ISO))
FROM   LIBNAME.FILENAME 
WHERE  <blah blah blah>
1 голос
/ 08 октября 2010

Дело в том, что поля даты / времени AS / 400 в основном являются строковыми литералами. По крайней мере, именно так они выглядят, когда вы проверяете физические файлы в AS / 400. Пока они находятся в обычном порядке временных меток, т.е. YYYY.MM.DD.hh.mm.ss, они сортируются и сопоставимы (друг с другом).

Если это не отвечает вашим потребностям, вам придется массировать поля или выполнять другие промежуточные шаги самостоятельно.

1 голос
/ 07 октября 2010

Я думаю, вам нужно будет ввести столбец, который DataGridView может интерпретировать как дату, а не как строку. Если вы не можете сделать это с DB2 SQL, вы можете добавить новый столбец даты в таблицу данных.

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