2013年4月25日 星期四

[除錯] System.ArgumentException:DataGridViewComboBoxCell 值無效 (1)


程式碼:

        Me.DataGridView1.AutoGenerateColumns = False
        Me.DataGridView1.DataSource = dt

        '加減項
        Dim installss() As Decimal = {-1, 1}
        Dim columnID As New DataGridViewComboBoxColumn()
        columnID.HeaderText = "加減項"
        columnID.Name = "加減項"
        columnID.DataPropertyName = "加減項"
        columnID.ValueType = GetType(System.Decimal)
        columnID.Items.AddRange(installss)  'columnID.Items.AddRange(+1, -1)
        'columnID.Items.AddRange(New Object() {-1, +1,})
        DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {columnID})
 

原因:
出现这种问题有两种原因:
1.数据类型不匹配 
2.所赋数据项与绑定的数据源中数据不符 结贴!

此次debug為第一種原因:
資料庫的資料型態為 Decimal(13,6)
.NET的資料型態為 Decimal , Object 皆無法成功。

解決(一):
改用DataTable方式...
        Me.DataGridView1.AutoGenerateColumns = False
        Me.DataGridView1.DataSource = dt

        Dim dtttt As DataTable = New DataTable
        dtttt.Columns.Add("加減項", GetType(Decimal))
        dtttt.Columns.Add("中文", GetType(String))
        dtttt.Rows.Add(+1, "加")
        dtttt.Rows.Add(-1, "減")
        dtttt.TableName = "XXX"

        '加減項
        Dim installss() As Decimal = {-1, 1}
        Dim columnID As New DataGridViewComboBoxColumn()
        columnID.HeaderText = "加減項"
        columnID.Name = "加減項"
        columnID.DataPropertyName = "加減項"
        columnID.ValueType = GetType(System.Decimal)

        columnID.DataSource = dtttt
        columnID.DisplayMember = "中文"
        columnID.ValueMember = "加減項"

        DataGridView1.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {columnID})

解決(二):
應該要依這個link的方式(類別),來繫結資料... """待測試"""
如何在程式內,直接給DataGridViewComboBoxColumn的下拉選單內容?
如何自訂DataGridView中DataGridViewComboBoxColumn物件
如何自訂DataGridView中DataGridViewComboBoxColumn物件

參考:
C# 類型的預設值 (C# 參考)  string就不會出錯,但數值有預設值,所以會出錯...

DataGridView 資料行下拉選單,資料繫結階段顯示 DataGridViewComboBoxCell 值無效
DataGridViewComboBoxCell.GetFormattedValue 方法
给DataGridViewComboBoxCell赋值的问题!
DataGridViewComboBoxColumn值无效
DataGridViewComboBoxColumn值无效
解决方法就是在窗体的构造函数里添加如下代码:
this.dataGridView1.DataError += delegate(object sender, DataGridViewDataErrorEventArgs e) { };

DataGridViewComboBoxColumn的使用 (高招)
Mapping CLR Parameter Data
DataGridView 使用问题
SQL Server 資料型別對應 (ADO.NET).
DataGridView.DataError 事件
DataGridViewDataErrorContexts 列舉型別

Non-String values in DataGridViewComboBoxColumn causing DataErrors in DataGridView
System.ArgumentException:DataGridViewComboBoxCell 值無效 (2)
DataGridViewComboBoxCell 值無效
DataGridView中comboBox数据绑定的问题
DataGridView 的DataGridViewComboBoxColumn 無效值問題

SqlServer中decimal(numeric )、float 和 real 数据类型的区别
What is a good mapping of .NET decimal to SQL Server decimal?

沒有留言:

張貼留言