WPF datagrid设计一个表格!在勾选一个参数时就会生成一列!勾选多个就生成多列
本人自己在看WPF遇到难题,希望有大神可以帮帮忙!
前端:
<DockPanel>
<StackPanel Orientation="Horizontal" DockPanel.Dock="Top">
<CheckBox x:Name="idCheckBox" Content="ID" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
<CheckBox x:Name="nameCheckBox" Content="Name" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
<CheckBox x:Name="ismaleCheckBox" Content="IsMale" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
<CheckBox x:Name="typeCheckBox" Content="Type" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
<CheckBox x:Name="siteidCheckBox" Content="SiteID" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
<CheckBox x:Name="birthdateCheckBox" Content="BirthDate" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
<Button x:Name="CheckBox" Content="Search" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Click="SearchBtn_OnClick"/>
</StackPanel>
<DataGrid x:Name="gridProfucts" AutoGenerateColumns="True" AutoGeneratingColumn="GridProfucts_OnAutoGeneratingColumn">
</DataGrid>
</DockPanel>
后台:
public partial class MainWindow : Window
{
ObservableCollection<Employee> employees = new ObservableCollection<Employee>();
public MainWindow()
{
InitializeComponent();
//数据源
employees.Add(new Employee {
ID = 1,
Name = "Kapil Malhotra",
IsMale = true,
Type = EmployeeType.Normal,
SiteID = new Uri("http://localhost/4322"),
BirthDate = new DateTime(1980, 1, 1)
});
employees.Add(new Employee {
ID = 2,
Name = "George",
IsMale = true,
Type = EmployeeType.Manager,
SiteID = new Uri("http://localhost/4432"),
BirthDate = new DateTime(1980, 2, 1)
});
employees.Add(new Employee {
ID = 3,
Name = "Vicky",
IsMale = false,
Type = EmployeeType.Supervisor,
SiteID = new Uri("http://localhost/4872"),
BirthDate = new DateTime(1980, 3, 1)
});
}
private void SearchBtn_OnClick(object sender, RoutedEventArgs e) //设置 AutoGenerateColumns="False"的一种方法
{
gridProfucts.ItemsSource = null;
gridProfucts.ItemsSource = employees;
//if (idCheckBox.IsChecked == true) {
// var newColumn = new DataGridTextColumn();
// newColumn.Binding = new Binding(nameof(Employee.ID));
// newColumn.Header = nameof(Employee.ID);
// gridProfucts.Columns.Add(newColumn);
//}
}
private void GridProfucts_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
e.Cancel = true;
if (e.Column.Header.ToString() == nameof(Employee.ID)) {
if (idCheckBox.IsChecked == true) {
e.Cancel = false;
}
}
if (e.Column.Header.ToString() == nameof(Employee.Name))
{
if (nameCheckBox.IsChecked == true)
{
e.Cancel = false;
}
}
if (e.Column.Header.ToString() == nameof(Employee.IsMale))
{
if (ismaleCheckBox.IsChecked == true)
{
e.Cancel = false;
}
}
if (e.Column.Header.ToString() == nameof(Employee.Type))
{
if (typeCheckBox.IsChecked == true)
{
e.Cancel = false;
}
}
if (e.Column.Header.ToString() == nameof(Employee.SiteID))
{
if (siteidCheckBox.IsChecked == true)
{
e.Cancel = false;
}
}
if (e.Column.Header.ToString() == nameof(Employee.BirthDate))
{
if (birthdateCheckBox.IsChecked == true)
{
e.Cancel = false;
}
}
}
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public bool IsMale { get; set; }
public EmployeeType Type { get; set; }
public Uri SiteID { get; set; }
public DateTime BirthDate { get; set; }
}
public enum EmployeeType
{
Normal,
Supervisor,
Manager
}
}
目前功能实现了,但是我对其面向对象及封装不是很清楚,上面代码中对 checkbox是否是check状态 做出判断的那些代码 怎么封装成一个函数来进行调用?
if (e.Column.Header.ToString() == nameof(Employee.ID)) {
if (idCheckBox.IsChecked == true) {
e.Cancel = false;
}
}
if (e.Column.Header.ToString() == nameof(Employee.Name))
{
if (nameCheckBox.IsChecked == true)
{
e.Cancel = false;
}
}
if (e.Column.Header.ToString() == nameof(Employee.IsMale))
{
if (ismaleCheckBox.IsChecked == true)
{
e.Cancel = false;
}
}
if (e.Column.Header.ToString() == nameof(Employee.Type))
{
if (typeCheckBox.IsChecked == true)
{
e.Cancel = false;
}
}
if (e.Column.Header.ToString() == nameof(Employee.SiteID))
{
if (siteidCheckBox.IsChecked == true)
{
e.Cancel = false;
}
}
if (e.Column.Header.ToString() == nameof(Employee.BirthDate))
{
if (birthdateCheckBox.IsChecked == true)
{
e.Cancel = false;
}
}
如何将其封装。 请大神讲解,拜托了!