我正在使用4列未绑定的datagridview。网格使用excel工作表中的十进制数填充。有些单元格有数字,有些单元格留空。
使用以下网格将网格设置为editmode:
dgv.EditMode = DataGridViewEditMode.EditOnEnter
我需要能够将带有数字和单元格的单元格留空。
当我尝试使用空值保留单元格时,这是错误消息。
DataGridView中发生以下异常:
system.FormatException:输入字符串的格式不正确 ---> system.FormatException:输入字符串不正确 格式。
at System.Number.StringToNumber {string str,NumberStyles options,NumberBuffer& number,NumberFormatInfo信息, Boolean parseDecimal)
at System.Number.ParseDecimal {string value,Numberstyles options,NumberFormatlnfo numfmt)
---内部异常堆栈跟踪结束---在 system.windows.Forms.Formatter.lnvokeString parse方法{obje ct value,Type targetType,IFormatProvider formatlnfo)
at system.windows.Forms.Formatter.ParseObjectlnternal(object value,Type targetType,Type sourceType,TypeConverter targetConverter,Typeconverter sourceconverter,IForm atprovider formatlnfo,对象格式化NullValue)
at system.windovs.Forms.Formatter.parseobject(object value, 键入targetType,Type sourceType,TypeConverter targetConverter,TypeConverter sourceConverter,iForm atprovider formatlnfo,Object formattedNullValue,Object dataSourceNullValue)
在 System.Windows.Forms.DataGridViewCell.ParseFormattedValueln terna(TypevalueType,Object formattedValue, DataGridViewCell.Style cellStyle,TypeConverter 格式化ValueTypeConverter,类型转换器 valueTypeConverter)
在 system.windows.Forms.DataGridvieCell.ParseFormattedvalue( Object formattedValue,DataGridViewCellStyle cellStyle, Typeconverter formattedvalueTypeconverter,Typeconverter valueTypeConverter)
在 system.windows.Forms.DataGridview.pushFormattedvalue(数据 Gridviewcell&安培; dataGridViewCurrentCell,object formattedvalue, 异常和放大器;例外)
要替换此默认对话框,请处理DataError事件。
我认为此消息与无法将空白值“提交”到数据表相关联。
这是用于填充datagridview的代码:
Dim cb As New OleDbConnectionStringBuilder With {.DataSource = XLFILENAMEANDPATH, .Provider = "Microsoft.ACE.OLEDB.12.0"}
cb.Add("Extended Properties", "Excel 12.0; IMEX=1; HDR=Yes;")
Dim cn As New System.Data.OleDb.OleDbConnection With {.ConnectionString = cb.ConnectionString}
cn.Open()
dta = New OleDbDataAdapter("Select * From [" & ActName & "$B6:E" & LastEntryRow & "]", cn)
dts = New DataSet
dta.Fill(dts, "Detailtable")
DataGridView1.DataSource = dts
DataGridView1.DataMember = "Detailtable"
cn.Close()
我无法解决问题,并希望得到一些指导。
答案 0 :(得分:0)
使用小数时,这些错误经常与文化特定问题相关。大多数.net
函数中的构建(返回值为“依赖于文化”)使用CurrentThread.CurrentCulture
来格式化其返回值(如果没有其他指定的话)。以下是Decimal.Parse
的示例:
Public Structure Decimal
'...
Public Shared Function Parse(ByVal s As String, ByVal style As NumberStyles) As Decimal
NumberFormatInfo.ValidateParseStyleFloatingPoint(style)
Return Number.ParseDecimal(s, style, NumberFormatInfo.CurrentInfo)
End Function
'...
End Structure
NumberFormatInfo.CurrentInfo
的位置:
Public Shared ReadOnly Property CurrentInfo As NumberFormatInfo
Get
Dim currentCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
If Not currentCulture.m_isInherited Then
Dim numInfo As NumberFormatInfo = currentCulture.numInfo
If (Not numInfo Is Nothing) Then
Return numInfo
End If
End If
Return DirectCast(currentCulture.GetFormat(GetType(NumberFormatInfo)), NumberFormatInfo)
End Get
End Property
您需要指定当前线程的正确CultureInfo。一种方法是在主窗体的构造函数中设置它。在挪威(我来自哪里),我们使用,
作为小数分隔符,而不是.
。如果我不改变文化,这将导致很多问题。因此,在以下示例中,文化设置为挪威语:
Public Class Program
Public Sub New()
Me.InitializeComponent()
Thread.CurrentThread.CurrentCulture = New CultureInfo("nb-NO")
Thread.CurrentThread.CurrentUICulture = New CultureInfo("nb-NO")
End Sub
End Class
以下是您可以找到您的文化代码列表:
http://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx