【问题标题】:Binding DB2 (iSeries) DATE/TIME/TIMESTAMP columns to a WinForms DataGridView将 DB2 (iSeries) DATE/TIME/TIMESTAMP 列绑定到 WinForms DataGridView
【发布时间】:2011-04-21 20:22:36
【问题描述】:

我正在尝试将 AS/400 文件的内容拉回数据绑定的 .NET WinForms DataGridView (VS 2010)。查询本身没有问题,我可以使用网格的 DataSource 属性绑定所有内容。数据返回没有问题。

我我遇到的问题是所有日期/时间字段都以字符串文字形式返回,因此无法排序。此外,它使用我们默认的 AS/400 格式(yyyy-dd-mm 和 hh.mm.ss)返回。我希望它们作为实际的日期/时间字段返回,以便对它们进行排序并且我可以控制输出格式(我更喜欢 MM/dd/yyyy 和 hh:mm:ss AMPM)。我尝试使用 TIMESTAMP 格式将这两个字段组合为一个,但这只是给了我一个组合字符串。

我希望尽可能避免进行任何字段按摩,并且我希望保持表格数据绑定以便于编码,但如果我必须关闭列自动生成,我会这样做。我还想避免执行任何中间 LINQ 查询,因为我失去了开箱即用的按列排序的能力(而且我在网上看到的添加此功能的示例都很长而且很痛苦)。

任何人都可以提出任何建议吗?谢谢!

编辑:代码示例。查询值的 SQL(更改名称以保护无辜者)是:

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

SQL 查询通过 OleDbDataAdapter.Fill 命令写入 DataTable。

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

非常简单(如果可能,尽量保持这种方式)

【问题讨论】:

  • 你能提供一些你是如何做到这一点的代码吗?这将有助于回答问题。
  • 好点。编辑以包含一些基本代码。

标签: sql winforms datagridview db2 ibm-midrange


【解决方案1】:

我认为您将不得不引入一个 DataGridView 可以解释为日期而不是字符串的列。如果用 DB2 SQL 做不到,可以在数据表中添加一个新的日期列。

【讨论】:

  • 是的,你可能是对的。 DataBound 控件很棒,让生活更轻松,但当您进入 AS/400 的神秘世界时,它们就会崩溃。谢谢!
【解决方案2】:

问题是,AS/400 日期时间字段基本上是 字符串文字。至少,当您检查 AS/400 上的物理文件时,它们看起来是这样的。只要它们采用通常的时间戳顺序,即 YYYY.MM.DD.hh.mm.ss,它们就可以排序和比较(彼此)。

如果这不能满足您的需求,您将不得不自己按摩田地或执行其他中间步骤。

【讨论】:

  • 这就是我最终所做的。我把最后的毫秒数剪掉了,说它很好。这不是一个会被大量使用的字段,因此为了使其可排序和可格式化为 .NET 日期而进行所有手动工作是不值得的。谢谢!
【解决方案3】:

尝试以下方法:

SELECT MYDATE, 
       MYTIME, 
       TIMESTAMP(CHAR(MYDATE,ISO)||'-'||CHAR(MYTIME,ISO))
FROM   LIBNAME.FILENAME 
WHERE  <blah blah blah>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 2020-02-11
    • 2012-02-12
    • 2010-09-12
    • 2018-04-06
    • 1970-01-01
    • 2012-11-02
    • 2014-08-14
    相关资源
    最近更新 更多