WPF DataGridTemplateColumn添加按钮和按钮事件获取行参数
在开发软件过程中有一些客户要求要在表个里面添加一列“状态列”在这列里面添加有按钮,这些按钮有“删除、编辑、停用、启用、修改、详细内容等等”。开发人员为了瞒足看客户的需求从而开发表格里面添加按钮的需求,每一行的按钮只能对他所在的一行进行操作,不能操作别的行的内容。
下面的的代码是WPF XAML的表格里面添加按钮的XAML的代码:
<Window x:Class="WpfApp1.Window3"
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:core="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.Resources>
<ObjectDataProvider x:Key="SexEnumKey" MethodName="GetValues" ObjectType="{x:Type core:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type Type="local:SexEnum"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<Grid >
<DataGrid Name="userList" ItemsSource="{Binding}" AutoGenerateColumns="False" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="编号" Width="80*" Binding="{Binding }" />
<DataGridTextColumn Header="客户名称" Width="80*" Binding="{Binding }" />
<DataGridComboBoxColumn Header="性别" Width="50*" SelectedItemBinding="{Binding sex}"
ItemsSource="{Binding Source={StaticResource SexEnumKey}}" />
<DataGridTextColumn Header="手机号" Width="80*" Binding="{Binding created_at}" />
<DataGridTemplateColumn Header="操作状态" Width="80*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
<Button Content="编辑" Name="Bianji" Tag="{Binding}" Click="Bianji_Click" />
<Button Content="删除" Name="Shangchu" Tag="{Binding}" Click="Shangchu_Click" Foreground="#FFE01919" />
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
C#的代码如下
行里面有按钮了然后对里面的按钮添加Click事件转到代码编写按钮对应的事件即可
//编辑
private void Bianji_Click(object sender, RoutedEventArgs e)
{
}
//删除
private void Shangchu_Click(object sender, RoutedEventArgs e)
{
}
下图运行的码的效果截图
以上是本人参考了一些网上的资料做出的一个案例,如有不足的地方请指出、我会思考问题修改不足的地方。
出处:https://blog.csdn.net/weixin_42104218/article/details/97415042
注意:
这里建议按钮的绑定使用 <Button Content="编辑" Name="Bianji" Tag="{Binding}" Click="Bianji_Click" />
这样就可以在对应的Click事件中获取到当前行的Model对象,另外,还可以使用下面的方式获取绑定的数据
==========================================================================================
// 删除 private void BtnDelete_Click(object sender, RoutedEventArgs e) { //获取需要删除的行 //DataRowView SelectedRow = dgrdView.SelectedItem as DataRowView; //当你的DataGrid的ItemsSource是DataTable时使用该方式 var SelectedRow = (DemoViewModel)dgrdView.SelectedItem; //当你的DataGrid的ItemsSource是对象集合时使用该方式(这里我用的这个,我的对象集合是List<DemoViewModel>) //其他逻辑代码,本处省略。。。 }
出处:https://blog.csdn.net/destiny_98/article/details/102950585
========================================================================
WPF 元素tag属性绑定一个属性或一个对象
直接上代码吧!
<Window x:Class="CollectionBinding.CategoryDataTemp" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="CategoryDataTemp" Height="300" Width="300"> <Grid> <ListBox Margin="3" Name="lstCategories" HorizontalContentAlignment="Stretch"> <ListBox.ItemTemplate> <DataTemplate> <Grid Margin="3"> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition Width="Auto"></ColumnDefinition> </Grid.ColumnDefinitions> <TextBlock VerticalAlignment="Center" Text="{Binding Path=CategoryName}"></TextBlock> <!--<Button Grid.Column="1" Padding="3" Click="View_Clicked" Tag="{Binding Path=CategoryID}">View...</Button>--> <Button Grid.Column="1" Padding="3" Click="View_Clicked" Tag="{Binding}">View...</Button> </Grid> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </Grid> </Window> using ClassLibrary; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace CollectionBinding { /// <summary> /// Interaction logic for CategoryDataTemp.xaml /// </summary> public partial class CategoryDataTemp : Window { public CategoryDataTemp() { InitializeComponent(); lstCategories.ItemsSource = StoreDB.GetProductsAndCategories().Tables["Categories"].DefaultView; } private void View_Clicked(object sender, RoutedEventArgs e) { Button btn = (Button)sender; //int categoryID = (int)btn.Tag; //绑定到CategoryID,例如Tag="{Binding CategoryID}" 或者 Tag="{Binding Path=CategoryID}" //MessageBox.Show(categoryID.ToString());
DataRowView row = (DataRowView)btn.Tag; MessageBox.Show(row["CategoryID"].ToString() + " : " + row["CategoryName"].ToString()); } } } //数据库操作类 namespace ClassLibrary { public class StoreDB { public static string connString = Properties.Settings.Default.ConnectionString; public static Product GetProductByID(int id) { Product p = null; SqlConnection con = new SqlConnection(connString); SqlCommand cmd = new SqlCommand("GetProductByID", con); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@ProductID", id); try { con.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { p = new Product() { CategoryID = (int)reader[1], ModelNumber = reader[2].ToString(), ModelName = reader[3].ToString(), ProductImage=reader[4].ToString(), UnitCost = (decimal)reader[5], Description = reader[6].ToString() }; } return p; } catch (Exception) { throw; } finally { con.Close(); } } public static void UpdateProductByID(int ProductID,Product p) { SqlConnection con = new SqlConnection(connString); SqlCommand cmd = new SqlCommand("UpdateProductByID", con); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@ProductID",ProductID); cmd.Parameters.AddWithValue("@CategoryID",p.CategoryID); cmd.Parameters.AddWithValue("@ModelNumber",p.ModelNumber); cmd.Parameters.AddWithValue("@ModelName",p.ModelName); cmd.Parameters.AddWithValue("@ProductImage",p.ProductImage); cmd.Parameters.AddWithValue("@UnitCost",p.UnitCost); cmd.Parameters.AddWithValue("@Description",p.Description); try { con.Open(); cmd.ExecuteNonQuery(); } catch (Exception) { throw; } finally { con.Close(); } } public static void InsertProduct(Product p) { SqlConnection con = new SqlConnection(connString); SqlCommand cmd = new SqlCommand("InsertProduct", con); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@CategoryID", p.CategoryID); cmd.Parameters.AddWithValue("@ModelNumber", p.ModelNumber); cmd.Parameters.AddWithValue("@ModelName", p.ModelName); cmd.Parameters.AddWithValue("@ProductImage", p.ProductImage); cmd.Parameters.AddWithValue("@UnitCost", p.UnitCost); cmd.Parameters.AddWithValue("@Description", p.Description); try { con.Open(); cmd.ExecuteNonQuery(); } catch (Exception) { throw; } finally { con.Close(); } } public static void DeleteProductByID(int id) { SqlConnection con = new SqlConnection(connString); SqlCommand cmd = new SqlCommand("DeleteProductByID", con); cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.Parameters.AddWithValue("@ProductID", id); try { con.Open(); cmd.ExecuteNonQuery(); } catch (Exception) { throw; } finally { con.Close(); } } public static ObservableCollection<Product> GetProducts() { ObservableCollection<Product> products = new ObservableCollection<Product>(); SqlConnection con = new SqlConnection(connString); SqlCommand cmd = new SqlCommand("GetProducts", con); cmd.CommandType = System.Data.CommandType.StoredProcedure; try { con.Open(); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { products.Add(new Product() { ProductID = (int)reader[0], CategoryID = (int)reader[1], ModelNumber = reader[2].ToString(), ModelName = reader[3].ToString(), ProductImage = reader[4].ToString(), UnitCost = (decimal)reader[5], Description = reader[6].ToString() }); } return products; } catch (Exception) { throw; } finally { con.Close(); } } public static DataSet GetProductsAndCategories() { SqlConnection con = new SqlConnection(connString); SqlCommand cmd = new SqlCommand("GetProducts", con); cmd.CommandType = System.Data.CommandType.StoredProcedure; DataSet ds = new DataSet(); SqlDataAdapter adatper = new SqlDataAdapter(cmd); adatper.Fill(ds, "Products"); cmd.CommandText = "GetCategories"; adatper.Fill(ds, "Categories"); DataRelation rel = new DataRelation("CategoryProduct", ds.Tables["Categories"].Columns["CategoryID"], ds.Tables["Products"].Columns["CategoryID"]); return ds; } } } //实体对象 namespace ClassLibrary { public class Product { public int ProductID { get; set; } public int CategoryID { get; set; } public string ModelNumber { get; set; } public string ModelName { get; set; } public string ProductImage { get; set; } public decimal UnitCost { get; set; } public string Description { get; set; } public Product(int CategoryID = 0, string ModelNumber = "", string ModelName = "", string ProductImage = "",
decimal UnitCost=0,string Description="") { this.CategoryID = CategoryID; this.ModelNumber = ModelNumber; this.ModelName = ModelName; this.ProductImage = ProductImage; this.UnitCost = UnitCost; this.Description = Description; } } }
出处:https://blog.csdn.net/dxm809/article/details/79785923
关注我】。(●'◡'●)
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的【因为,我的写作热情也离不开您的肯定与支持,感谢您的阅读,我是【Jack_孟】!
本文来自博客园,作者:jack_Meng,转载请注明原文链接:https://www.cnblogs.com/mq0036/p/12566955.html
【免责声明】本文来自源于网络,如涉及版权或侵权问题,请及时联系我们,我们将第一时间删除或更改!
posted on 2020-03-25 16:21 jack_Meng 阅读(5187) 评论(0) 编辑 收藏 举报