You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WPF的DataGrid中展示通过Dapper获取的列表数据?

在WPF中使用Dapper获取数据并绑定到DataGrid的实现方法

1. 后台数据获取与直接绑定

数据查询逻辑和你在WinForms里的写法几乎一致,仅UI绑定方式有区别。推荐使用ObservableCollection<T>替代List<T>——它能自动通知UI数据变化,适配WPF的绑定机制:

using System.Collections.ObjectModel;
using Dapper;
using System.Data.SqlClient;

// 假设已定义Person实体类
ObservableCollection<Person> personCollection = new ObservableCollection<Person>();

using (var conn = new SqlConnection(connectionString))
{
    var queryResult = conn.Query<Person>(yourQuery).ToList();
    foreach (var person in queryResult)
    {
        personCollection.Add(person);
    }
}

// 将集合赋值给DataGrid的ItemsSource
yourDataGrid.ItemsSource = personCollection;

如果只是一次性加载数据,用List<Person>直接赋值yourDataGrid.ItemsSource = list;也可行,但ObservableCollection更适合后续需要增删改数据并同步UI的场景。

2. XAML中定义DataGrid

先在XAML里声明DataGrid控件,可选择自动生成列或自定义列:

<Window x:Class="YourNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <!-- 自动生成列,适合快速展示 -->
        <DataGrid x:Name="yourDataGrid" AutoGenerateColumns="True" />
    </Grid>
</Window>

若需自定义列(比如指定列名、格式),可手动配置:

<DataGrid x:Name="yourDataGrid" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="姓名" Binding="{Binding Name}" />
        <DataGridTextColumn Header="年龄" Binding="{Binding Age}" />
        <!-- 按Person类属性添加其他列 -->
    </DataGrid.Columns>
</DataGrid>

3. 进阶:MVVM模式绑定(推荐)

如果项目遵循MVVM架构,可将数据集合放在ViewModel中实现解耦:

ViewModel示例:

using System.Collections.ObjectModel;
using Dapper;
using System.Data.SqlClient;

public class MainViewModel
{
    public ObservableCollection<Person> Persons { get; set; } = new ObservableCollection<Person>();

    public void LoadData()
    {
        using (var conn = new SqlConnection(connectionString))
        {
            var queryResult = conn.Query<Person>(yourQuery).ToList();
            foreach (var person in queryResult)
            {
                Persons.Add(person);
            }
        }
    }
}

XAML绑定配置:

<Window x:Class="YourNamespace.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:YourNamespace"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <local:MainViewModel />
    </Window.DataContext>
    <Grid>
        <DataGrid ItemsSource="{Binding Persons}" AutoGenerateColumns="True" />
    </Grid>
</Window>

最后在窗口构造函数中触发数据加载:

public MainWindow()
{
    InitializeComponent();
    var viewModel = (MainViewModel)DataContext;
    viewModel.LoadData();
}

内容的提问来源于stack exchange,提问作者vick_93h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:33:28