DataTable 使用数据库中的数据进行填充。
var query = $"SELECT * FROM {databaseTable.Name}";
OracleCommand oracleCommand = new OracleCommand(query, _connection);
OracleDataAdapter oracleDataAdapter = new OracleDataAdapter(oracleCommand);
DataTable data = new DataTable();
oracleDataAdapter.Fill(data);
return data;
我想通过 Itemssource 使用 DataTable 填充 DataGrid。我们不想指定任何对象(类)。我们只想用从数据表中获取的信息填充网格
<control:DataGrid x:Name="gridView1" Margin="5" ItemsSource="{Binding DataTable}" GridLinesVisibility="All" AlternatingRowBackground="DarkBlue">
目前我有一个 ListView,它向我显示我们从数据库中单独读出的所有表
<ListView x:Name="listView" ItemsSource="{Binding DatabaseTables, Mode=TwoWay}" DisplayMemberPath="Name" SelectedItem="{Binding DatabaseTable, Mode=TwoWay}">
通过选择一个表,我们希望网格中显示所有条目以及数据表中的预期列
我尝试环顾四周,但找不到解决方案。
这应该有效:
MainPageViewModel.cs
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Collections.ObjectModel;
using System.Data;
using System.Threading.Tasks;
namespace DataTableExample;
public partial class MainPageViewModel : ObservableObject
{
[ObservableProperty]
private ObservableCollection<object>? _items;
[RelayCommand]
private async Task LoadItems()
{
DataTable dataTable = await LoadItemsFromDataBase();
ObservableCollection<object> items = new();
foreach (DataRow row in dataTable.Rows)
{
items.Add(row.ItemArray);
}
Items = items;
}
private Task<DataTable> LoadItemsFromDataBase()
{
return Task.Run(() =>
{
DataTable dataTable = new();
dataTable.Columns.Add("Id", typeof(int));
dataTable.Columns.Add("Name", typeof(string));
dataTable.Columns.Add("Price", typeof(decimal));
dataTable.Rows.Add(1, "Product 1", 10.0);
dataTable.Rows.Add(2, "Product 2", 20.0);
dataTable.Rows.Add(3, "Product 3", 30.0);
return dataTable;
});
}
}
MainPage.xaml.cs
using Microsoft.UI.Xaml.Controls;
namespace DataTableExample;
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private MainPageViewModel ViewModel => new();
}
主页.xaml
<Page
x:Class="DataTableExample.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="using:DataTableExample"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:toolkit="using:CommunityToolkit.WinUI.UI.Controls"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
mc:Ignorable="d">
<Grid RowDefinitions="Auto,*">
<Button
Grid.Row="0"
Command="{x:Bind ViewModel.LoadItemsCommand}"
Content="Load items" />
<toolkit:DataGrid
Grid.Row="1"
AutoGenerateColumns="False"
ItemsSource="{x:Bind ViewModel.Items, Mode=OneWay}">
<toolkit:DataGrid.Columns>
<toolkit:DataGridTextColumn
Binding="{Binding [0]}"
Header="ID" />
<toolkit:DataGridTextColumn
Binding="{Binding [1]}"
Header="Name" />
<toolkit:DataGridTextColumn
Binding="{Binding [2]}"
Header="Price" />
</toolkit:DataGrid.Columns>
</toolkit:DataGrid>
</Grid>
</Page>
注意:
我正在使用 CommunityToolkit.Mvvm NuGet 包进行 MVVM 设计。