无法在数据网格视图中创建空白单元格

时间:2014-03-08 11:25:52

标签: vb.net datagridview

我正在使用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()

我无法解决问题,并希望得到一些指导。

1 个答案:

答案 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