为什么在替换 vb 中的 datagridview 值时出现错误?
Why do I get error when replacing datagridview values in vb?
我有一个数据网格视图,其中包含一个导入的 excel 文件。我还有一个 MySQL 数据库,其中包含我想在我的 datagridview 中替换的值以及将替换以前值的值。
这是我的数据库:
我想要完成的是在 datagridview 单元格内循环并找到 Content 字段内的值并将其替换为 Convert 字段中的相应值。例如,所有 1 将替换为 11,所有 Name 1 将替换为 Std Name 1,所有 18 将替换为 18 Years Old。
我使用以下代码:
MysqlQuery = "SELECT * FROM contents"
MysqlComm = New MySqlCommand(MysqlQuery, MysqlConn)
MysqlReader = MysqlComm.ExecuteReader
While MysqlReader.Read
Dim content = MysqlReader.GetString("Content")
Dim convert = MysqlReader.GetString("Convert")
For Each row As DataGridViewRow In dgvFile.Rows
For Each cell As DataGridViewCell In row.Cells
If cell.Value IsNot Nothing Then
If cell.Value.ToString = content.ToString Then
cell.Value = convert.ToString
End If
End If
Next
Next
End While
MessageBox.Show("File successfully converted")
此代码转换 1 = 11 和 Name 1 = Std Name 1 但不转换 18 = 18 岁并显示此错误。
问题
为什么会出现此错误,我该如何解决?非常感谢您的回答和建议。谢谢。 :)
更新
对于那些看不到错误消息的人,这里是。
The following exception occurred in the DataGridView:
System.Exception: 18 Years Old is not a valid value for Double, --->
System.FormatException: Input string was not in a correct format.
at System.Number.PraseDouble(String value, NumberStyles options,
NumberFormatInfo numfmt)
at System.Double.Parse(String s, NumberStyles style, IFormatPRovider provider)
at System.ComponentModel.DoubleConverter.FromString(String value, NumberFormatInfo formatInfo)
at System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
--- End of inner exception stack trace ---
at System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
at System.ComponentModel.TypeConverter.ConvertFrom(Object value)
at System.Windows.Forms.DataGridView.DataGridViewDataConnection.PushValue(Int32 boundColumnIndex, Int32 columnIndex, Int32 rowIndex, Object value)
To replace this default dialog please handle the DataError event
似乎是导致您出错的行:
cell.Value = convert.ToString
可能是因为列类型是<> String
(可能是integer或double)。
您可以将值放入正确的类型中,而不是在设置值时执行 ToString
。
另一种选择是制作网格的所有列类型String
。但是你必须考虑到必须更改列的排序(你需要找到排序事件并在排序时将值转换为正确的类型)。
我有一个数据网格视图,其中包含一个导入的 excel 文件。我还有一个 MySQL 数据库,其中包含我想在我的 datagridview 中替换的值以及将替换以前值的值。
这是我的数据库:
我想要完成的是在 datagridview 单元格内循环并找到 Content 字段内的值并将其替换为 Convert 字段中的相应值。例如,所有 1 将替换为 11,所有 Name 1 将替换为 Std Name 1,所有 18 将替换为 18 Years Old。
我使用以下代码:
MysqlQuery = "SELECT * FROM contents"
MysqlComm = New MySqlCommand(MysqlQuery, MysqlConn)
MysqlReader = MysqlComm.ExecuteReader
While MysqlReader.Read
Dim content = MysqlReader.GetString("Content")
Dim convert = MysqlReader.GetString("Convert")
For Each row As DataGridViewRow In dgvFile.Rows
For Each cell As DataGridViewCell In row.Cells
If cell.Value IsNot Nothing Then
If cell.Value.ToString = content.ToString Then
cell.Value = convert.ToString
End If
End If
Next
Next
End While
MessageBox.Show("File successfully converted")
此代码转换 1 = 11 和 Name 1 = Std Name 1 但不转换 18 = 18 岁并显示此错误。
问题 为什么会出现此错误,我该如何解决?非常感谢您的回答和建议。谢谢。 :)
更新 对于那些看不到错误消息的人,这里是。
The following exception occurred in the DataGridView:
System.Exception: 18 Years Old is not a valid value for Double, --->
System.FormatException: Input string was not in a correct format.
at System.Number.PraseDouble(String value, NumberStyles options,
NumberFormatInfo numfmt)
at System.Double.Parse(String s, NumberStyles style, IFormatPRovider provider)
at System.ComponentModel.DoubleConverter.FromString(String value, NumberFormatInfo formatInfo)
at System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
--- End of inner exception stack trace ---
at System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value)
at System.ComponentModel.TypeConverter.ConvertFrom(Object value)
at System.Windows.Forms.DataGridView.DataGridViewDataConnection.PushValue(Int32 boundColumnIndex, Int32 columnIndex, Int32 rowIndex, Object value)
To replace this default dialog please handle the DataError event
似乎是导致您出错的行:
cell.Value = convert.ToString
可能是因为列类型是<> String
(可能是integer或double)。
您可以将值放入正确的类型中,而不是在设置值时执行 ToString
。
另一种选择是制作网格的所有列类型String
。但是你必须考虑到必须更改列的排序(你需要找到排序事件并在排序时将值转换为正确的类型)。