WPF 使用DataGrid绑定数据,并添加编辑和删除按钮

xaml

<DataGrid Name="userList"  AutoGenerateColumns="False" CanUserAddRows="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="用户名" Width="800" Binding="{Binding name}" />
                    <DataGridTextColumn Header="工 号" Binding="{Binding user_sn}" />
                    <DataGridTextColumn Header="时 间" Binding="{Binding created_at}" />
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <StackPanel Orientation="Horizontal">
                                    <Button Content="编 辑"  Tag="{Binding id}" Click="UserEditClick" />
                                    <Button Content="删 除" Tag="{Binding id}" Click="UserDeleteClick" />
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>

使用DataGridTemplateColumnkey在一列添加多个控件,这里添加了2个按钮,编辑和删除

数据绑定,直接从DataTable中读取数据绑定

UserViewModel userModel = new UserViewModel();
            this.userList.ItemsSource = userModel.GetUser().DefaultView;

编辑

我使用了页面跳转编辑,觉得这样好看点,用弹窗感觉不好看

private void UserEditClick(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;
            if (btn != null)
            {
                int id = Convert.ToInt32(btn.Tag);
                User user = new User(id);
                this.NavigationService.Navigate(user);
            }
        }

编辑页面需要多一个构造函数接收参数

public User(int id)
        {
            InitializeComponent();
            if (id != 0)
            {
                this._id = id;
                EditUserInit(this._id);
            }
        }

编辑直接从DataRow中读取数据

public void EditUserInit(int id)
        {
            UserViewModel userModel = new UserViewModel();
            Dictionary<string, object> user = userModel.GetUserRowById(id);
            this.nameTxt.Text = user["name"].ToString();
            this.userSnTxt.Text = user["user_sn"].ToString();
        }

删除

private void UserDeleteClick(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;
            if (btn != null)
            {
                int id = Convert.ToInt32(btn.Tag);
                UserViewModel userModel = new UserViewModel();
                userModel.DeleteUser(id);
                MessageBox.Show("删除成功");
                this.userList.ItemsSource = userModel.GetUser().DefaultView;
            }
        }

orm参考 https://blog.csdn.net/tang05709/article/details/89647068https://blog.csdn.net/tang05709/article/details/89647068

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF中的`DataGrid`中添加`Button`,并为`Button`添加绑定事件,可以使用以下步骤: 1. 在`DataGrid`中添加`Button`列,可以使用`DataGridTemplateColumn`来实现,如下所示: ```xml <DataGrid.Columns> <DataGridTemplateColumn Header="Action"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="Click Me" Click="ButtonClick"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid.Columns> ``` 2. 在`Button`上添加`Click`事件的处理方法,例如`ButtonClick`: ```csharp private void ButtonClick(object sender, RoutedEventArgs e) { // 处理按钮点击事件的代码 } ``` 3. 在代码中,为`DataGrid`的`ItemsSource`属性设置数据源,例如`List<MyData>`,其中`MyData`是自定义类型。 ```csharp List<MyData> dataList = new List<MyData>(); // 添加数据到dataList中 myDataGrid.ItemsSource = dataList; ``` 4. 在`MyData`类型中添加一个属性,用于绑定到`Button`的`DataContext`。例如: ```csharp public class MyData { public string Name { get; set; } public ICommand ButtonCommand { get; set; } public MyData(string name, ICommand buttonCommand) { Name = name; ButtonCommand = buttonCommand; } } ``` 5. 在`DataGridTemplateColumn.CellTemplate`中,使用`Binding`来绑定`MyData`类型中的`ButtonCommand`属性到`Button`的`Command`属性,如下所示: ```xml <DataGridTemplateColumn Header="Action"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Content="Click Me" Command="{Binding ButtonCommand}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> ``` 6. 在代码中为`MyData`类型的`ButtonCommand`属性设置一个`ICommand`实例,例如: ```csharp MyData data = new MyData("Test", new RelayCommand(ButtonClick)); // 添加data到dataList中 ``` 其中,`RelayCommand`是一个实现了`ICommand`接口的自定义类,用于将一个方法绑定到`Button`的`Command`属性上。`ButtonClick`是`Button`的`Click`事件处理方法。 ```csharp public class RelayCommand : ICommand { private readonly Action execute; private readonly Func<bool> canExecute; public RelayCommand(Action execute) : this(execute, null) { } public RelayCommand(Action execute, Func<bool> canExecute) { if (execute == null) throw new ArgumentNullException("execute"); this.execute = execute; this.canExecute = canExecute; } public bool CanExecute(object parameter) { return canExecute == null || canExecute(); } public void Execute(object parameter) { execute(); } public event EventHandler CanExecuteChanged; } ``` 通过以上步骤,就可以在`DataGrid`中添加带有绑定事件的`Button`了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值