我需要将数据库中的表设置为 WPF 中 GridGrid 的数据源。在 Windows 窗体中,该属性称为
DataSource
但在 WPF 中不存在这样的属性,那么我该怎么做呢?
ItemsSource
属性:
<ListView ItemsSource="{Binding YourData}">
<ListView.View>
<GridView>
<!-- The columns here -->
</GridView>
</ListView.View>
</ListView>
如果您更喜欢使用代码隐藏而不是绑定,只需为
ListView
命名并在代码中设置 ItemsSource
属性:
listView1.ItemsSource = YourData;
您还可以将
ItemsSource
属性与其他列表控件(DataGrid
、ListBox
、ComboBox
等)一起使用,因为它是在 ItemsControl
基类中定义的。
编辑:如果数据源是
DataTable
,则不能将其直接分配给ItemsSource
,因为它没有实现IEnumerable
,但您可以通过绑定来完成:
listView1.SetBinding(ItemsControl.ItemsSourceProperty, new Binding { Source = YourData });
这是一个简单的例子:
XAML 部分 :
<DataGrid Name="dataGrid1" Width="866" Height="auto" HorizontalAlignment="Left" VerticalAlignment="Top" />
C#部分:
... [读取并填写表格的代码] ...
da.Fill(myDataTable);
dataGrid1.ItemsSource = myDataTable.DefaultView;
现在您的 DataGrid 将填充您的 DataTable
GridView
是一个视图,而不是一个独立的控件,您通常会将它用作
ListView
的视图。在 WPF 中,数据填充的属性称为
ItemsSource
,您可能希望使用
ListView
或
DataGrid
来以这种方式显示数据。
datagrid.ItemSource = mydt.DefaultView();
datagrid.DataContext = mydt.DefaultView();
<DataGrid x:Name="dataGridView1"
ItemsSource="{Binding Source=ClusterList}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="ClusterNumber" Binding="{Binding ClusterNumber}"/>
<DataGridTextColumn Header="ServerName" Binding="{Binding ServerName}"/>
/>
</DataGrid.Columns>
</DataGrid>
然后我就有cs代码了
public DiscoveryView()
{
InitializeComponent();
ClusterList = new ObservableCollection<ClusterData>();
LoadDataFromCsv();
dataGridView1.ItemsSource = ClusterList;}
public class ClusterData
{
public string ClusterNumber { get; set; }
public string ServerName { get; set; }
}
public ObservableCollection<ClusterData> ClusterList { get; set; }
private void LoadDataFromCsv()
{
using (var reader = new StreamReader("./Configs/clusterlist.csv"))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
ClusterList.Add(new ClusterData
{
ClusterNumber = values[0],
ServerName = values[1]
});
}
}
}
也许这段代码适合初学者,但它对我有用