2015-10-26 50 views
0

选择一个项目我有DataGridViews一个相当长的一段经历,我解决不了这个超级简单的问题...在Datagridviewcomboboxcolumn

我有一个comboboxcolumn一个DataGridView 预先设定可能的选项(3个简单的选项) 。我有一个表格的数据库,我想为列中的单元格选择正确的值。我需要保留用户可能稍后更改选项的选项(并将其保存回数据库)。

我创建了选项的数据表:

Dim dtShift As New DataTable 
    dtShift.Columns.Add("ValueM") 
    dtShift.Columns.Add("DisplayM") 
    dtShift.Rows.Add({123, "123"}) 
    dtShift.Rows.Add({345, "345"}) 
    dtShift.Rows.Add({678, "678"}) 

然后我给你这样(DS为数据集数据填充)值:

Me.DataGridView1.AutoGenerateColumns = False 
    Dim colpon As DataGridViewComboBoxColumn = Me.DataGridView1.Columns("PonLen") 
    With colpon 
     .DataSource = dtShift 
     .ValueMember = "ValueM" 
     .DisplayMember = "DisplayM" 
     .DataPropertyName = "PonLen".ToString ' contains an option like "345" 
     '.ValueMember = "PonLen" ' not needed, if Display member is saved 
    End With 

...但是这行不通好吧,尽管它尽可能的接近我所能得到的。我 列具有正确的选项,有选择正确的价值观,但DataErrorEvent洪水与错误像这样的测试日志文本框:

Row=12 cell=3 : System.FormatException: DataGridViewComboBoxCell value is not valid. 
+1

列'PonLen'的类型是什么?确保输入该列与选项DataTable中的'ValueM'列的类型相同。 – Fabio

+0

PonLen是TinyInt。我会看看如何为数据表列指定数据类型。 –

+0

我指定的值成员的数据类型:dtShift.Columns(0).DataType = System.Type.GetType(“System.Int32”) - 但它没有帮助解决此问题... –

回答

0

好了,问题是在数据类型,我没有意识到,System.Int16与System.Byte(ShortInt vs tinyInt)之间的区别确实很重要。

DB字段:TINYINT(0到256)

ValueMember:系统。 字节(0至256 - 从System.Int16改变或32)

......和现在的作品 - 因为它没有,但以同样的方式引发错误:-)

问候,

橡木

相关问题