在设置DataGrid中的一列为ComboBox样式后,想实现效果为:打开下拉列表后显示一组数据,用了2种方法绑定数据。
1.用数组,MSDN中http://msdn.microsoft.com/zh-CN/library/ms748365.aspx有示例可以实现效果:
Public Sub New()
MyBase.Add(New PersonName("Willa", "Cather"))
MyBase.Add(New PersonName("Isak", "Dinesen"))
MyBase.Add(New PersonName("Victor", "Hugo"))
MyBase.Add(New PersonName("Jules", "Verne"))
End Sub
但问题是:其数组值如何动态增减变换?下面是我用了个笨方法但还是行不通,请给意见。
Dim 数组() As String = ({"Willa", "Isak", "Victor"})'这样可以灵活变换数值
For i As Integer = 1 To 数组.Length - 1
MyBase.Add(New PersonName(数组(i).ToString))
Next
2.用绑定,但点击选中下拉列表中的值离开单元格焦点后,其单元格的内容不显示其选择的内容却显示成了文字:System.Data.DataRowView请教问题出在那里?
<DataGridTemplateColumn.CellEditingTemplate >
<DataTemplate >
<ComboBox SelectedItem="{Binding 字段1}"
DisplayMemberPath="字段2"
ItemsSource="{Binding Source={StaticResource DataSet1}, Path=表1}">
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
SelectedItem="{Binding 字段1}"
感觉你这个绑定的不对!每个Item对应的应该是DataSet1的一项,而不是某个字段吧!类型不匹配了,显示当然不正确啦!
也不知道我这么想的对不对。
既然使用了ObservableCollection<T>,就应该能够解决你的第一个问题~
了解一下MVVM,你会发现很容易的