GST*_*STD 6 wpf datagrid list visual-studio-2010
我想快速在DataGrid中显示一个List(OF String)(动态),所以我想
myDataGrid.ItemsSource = myList
Run Code Online (Sandbox Code Playgroud)
这将是一种快速简便的方法,因为它适用于DataTable:
myDataGrid.ItemsSource = myDataTable.DefaultView
Run Code Online (Sandbox Code Playgroud)
我的DataGrid将AutoGenerateColumns属性设置为"True".对于数据表,这可以正常工作,但是当我将List(Of String)分配给ItemsSource时,我的列名称显示为'Length',显示的数据是整数,它们是List中每个String项中的字符数,而不是实际的String项.
我究竟做错了什么?
编辑
我的测试列表是这样创建的:
Dim myList As New List(Of String)
For i As Int32 = 1 To 25
myList.Add("Item #" & i)
Next
Run Code Online (Sandbox Code Playgroud)
以下两种方法产生完全相同的结果.
创建一个CollectionView:
Dim cv = CType(CollectionViewSource.GetDefaultView(myList), CollectionView)
DataGrid1.ItemsSource = cv
Run Code Online (Sandbox Code Playgroud)
只需使用List:
DataGrid1.ItemsSource = myList
Run Code Online (Sandbox Code Playgroud)
这两种方法都在DataGrid中显示单个列.该列标题为"长度",包含与每个字符串条目的长度匹配的整数.
编辑
'testalino'对VB的回答:
DataGrid1.ItemsSource = myList.Select(Function(s) New With {.Value = s}).ToList
Run Code Online (Sandbox Code Playgroud)
你的例子其实很有趣。您正在将字符串类型的元素绑定到网格。然后,网格查找它可以显示的String类型的属性。找到的唯一属性是 Length,因此它创建一个名为 Length 的列并显示其值。
为避免这种情况,您需要做的是为字符串创建一个包装类。
要么显式创建一个类:
class StringWrapper
{
string Value { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
或者使用 LINQ:
List<string> strings = new List<string>();
strings.Add("abc");
strings.Add("def");
dataGrid.ItemsSource = strings.Select(s => new { Value = s }).ToList();
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助。
归档时间: |
|
查看次数: |
2723 次 |
最近记录: |