【发布时间】:2021-08-02 06:56:13
【问题描述】:
我使用各种数据源(Excel、Access 等)用来自多个文本和双字段的值填充了一个 DataTable (dt)。然后我从dt 填充了一个DataGridView,文本、整数和实数(双)列在DataGridView 中可见并且没有任何问题。
但是,在我的代码的一个区域中,我正在使用代码获取特定单元格的年龄值(第 6 列)
Dim myage As Integer = dt.rows(i)(j)
第 0 行的 age 值为 19,因此在大多数情况下使用 myage = dt.rows(0)(6) 时,年龄显示为 19。但是,在我的应用程序的另一个区域(使用相同的dt 和获取年龄值的代码),年龄显示为0 19,其中0 是dt 的行号。如果我使用 dt.rows(1)(6) 获得第 1 行的年龄值,它会显示为 1 24。
为什么 dt 在我的应用程序的一个区域只产生一个数值,而在我的应用程序的另一个区域产生行和年龄?
我不确定是否使用.row 是问题,我已经尝试过dt.rows(1).Field(Of Integer)(6) 并且它不会阻止出现行号。
由于我需要在我的应用程序的许多地方从dt 中提取单元格值,我该如何避免这种困境?
【问题讨论】:
-
你所描述的根本不可能。
Field(Of Integer)方法将返回Integer并且“0 19”和“1 24”不是Integers。这意味着它必须是您对数据而不是数据本身所做的事情。根据您的描述,听起来您实际上还没有调试过代码,所以您甚至不应该在这里发布问题。如果您不知道如何使用 VS 调试器,请停止您正在做的事情并立即学习。然后,您需要在发布之前始终调试您的代码,并提供您从调试器获得的信息。 -
我知道没有抛出异常,这证明您的列不包含您所暗示的数据。如果字段不包含
Integer,则调用Field(Of Integer)将引发异常,因此没有异常证明它确实如此。它还将返回一个Integer值,因此它不可能返回您报告的值。这证明您没有向我们提供准确的信息,或者在您从DataTable中获取数据后,问题是由您的代码造成的。