我需要从 txt 中获取的字符串数组集合构建并显示 WPF 数据网格。问题是我不知道先验的列数,即单个数组中的项目数。所以我在我的xaml中定义<DataGrid Grid.Row="2" ItemsSource="{Binding Path=Rows}" />
我试图将其填充到我的视图模型中,但我不能简单地将我的数组集合(可观察集合)作为项目源,因为数据网格将仅显示空白行。
我还可以在 Observable 集合上使用其他方法,因为我用相同的方法生成数组
这是我的可观察集合:
ObservableCollection<string[]> Rows = new ObservableCollection<string[]>;
在这个方法中我填充了集合
foreach(ListViewItem item in wsettings.lista)
{
TextBlock line = item.Content as TextBlock;
string txt = line.Text;
string[] x = txt.Split(stringSeparators, StringSplitOptions.None);
Rows.Add(x);
}
请不要介意分裂前的第一部分。我从我之前使用过的文本块列表视图中获取数据(我有我的理由)。
EDIT1:使代码更具可读性
EDIT2:标题必须是用户必须设置的组合框
有DataTable class https://msdn.microsoft.com/en-us/library/system.data.datatable(v=vs.110).aspx在.Net中。它的主要目的是与关系数据库通信,但它可以很好地用于存储、显示和编辑表格数据(例如读取和显示 .csv/Excel 文件 ->DataTable + DataGrid
在 wpf 中,DataTable + DataGridView
在 WinForms 中)。
可以在运行时添加/删除 DataTable 列 (DataColumn),并且 DataGrid 使用标题的 Name 属性自动为其生成列 (DataGridColumn)(默认启用)。 DataTable 还支持开箱即用的排序和过滤。
注意:DataGrid 不清除Columns
当分配新的 ItemsSource 时。因此,可以有一些预定义的列并使用自动生成。
注意:DataGrid 创建DataGridTextColumn
默认为 s。如果需要更复杂的模板,可以通过以下方式拦截该过程AutoGeneratingColumn
event (参见示例 https://stackoverflow.com/questions/40358111/datagrid-shows-path-of-image-instead-of-image-itself)
这是一个例子:
code
public class MyViewModel
{
public DataTable Test { get; set; }
}
public MyWindow()
{
InitializeComponent();
var vm = new MyViewModel
{
Test = new DataTable
{
Columns = {"A", "B", "C"}
}
};
this.DataContext = vm;
}
xaml
<DataGrid AutoGenerateColumns="True"
ItemsSource="{Binding Path=Test.DefaultView}">
<DataGrid.Columns>
<DataGridTextColumn Header="#"/>
</DataGrid.Columns>
</DataGrid>
结果(我输入了一些值)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)