本人自己在看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;
}
}
}
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
}
}
运行后不勾选,查不到任何东西,不生成任何列。勾选ID这个属性后,查看,自动生成一列为ID然后展示其数据!
现在的问题就是,我想写出勾选任何一个属性都会只生成一个属性列;和我选择两个或多个属性时,他也只会生成两个或者多个列。(比如我勾选了ID和Name两个属性只会生成ID和Name两列)
拜托各位大神,如果您懂这方面的东西,请您帮帮我忙,谢谢!谢谢!