如何从添加了行的DataTable中对未填充的DataGridView进行排序?

时间:2013-10-07 22:18:41

标签: vb.net datagridview datagridviewcolumn

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

这会填充DataGridView,没有任何问题。我可以通过单击列标题对列进行排序,而不会出现任何问题。如果我向新行的第一列添加一个值,然后尝试对列进行排序,我会收到一条错误消息,显示:“对象必须是String类型。”

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

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

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

我还确保StreamReader中的值是Integer类型,然后再在DataGridView中输入:

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

我也尝试过:

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

可能导致此问题的原因是什么?我已经验证了列中的所有单元格都具有相同的数据类型,但它仍然给我一个错误,我确信这是该列的问题。

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

1 个答案:

答案 0 :(得分:3)

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

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

所以这就是你必须要做的。

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

其中0是包含Integer的列。