0

我在对未绑定的 DataGridView 进行排序时遇到了一些麻烦。我正在从 StreamReader 填充 DataTable,然后手动将项目从 DataTable 传输到 DataGridView。DataGridView 上的 AllowUserToAddRows 属性设置为 true。

这将填充 DataGridView,没有任何麻烦。我可以通过单击列标题对列进行排序,没有任何问题。如果我在新行的第一列中添加一个值,然后尝试对该列进行排序,我会收到一条错误消息,显示:“对象必须是字符串类型。”

我尝试了不同的方法将列中的所有单元格转换为相同的数据类型,但我无法解决这个问题。我在这里错过了什么吗?

在表单加载事件中,我有以下代码:

dgvStartingGrid.Columns(0).ValueType = GetType(Integer)

在将 StreamReader 中的值输入 DataGridView 之前,我还要确保它们是整数类型:

If IsNumeric(strColumnValue) Then
    dtbFillGrid.Rows(intCurrentRow).Item("Starting Position") = strColumnValue
End If

我也试过:

dtbFillGrid.Rows(intCurrentRow).Item("Starting Position") = CInt(strColumnValue)

什么可能导致这个问题?我已经验证该列中的所有单元格都具有相同的数据类型,但它仍然给我一个错误,并且我确定问题出在该列上。

其他列是字符串类型,按列标题对它们进行排序没有任何问题,除非我单击第一列,然后引发异常。

4

1 回答 1

3

是的,经过一些测试,我发现了这一点。

即使您已将 DataGridView 列设置为整数,但这并不意味着它将填充整数。除非您更改 DataTable 的数据类型,否则 DataGridView 实际上是用字符串填充的。DataGridView 上的排序功能不是基于列类型,而是基于它找到的第一个值。由于你的值是一个字符串,当它到达你输入的值(它是一个整数)时你会得到一个错误。

所以这就是你必须做的。

dtbFillGrid.Columns.Item(0).DataType = GetType(Integer)

其中 0 是包含整数的列。

于 2013-10-09T06:22:32.927 回答