WPF datagrid设计一个表格!在勾选一个参数时就会生成一列!勾选多个就生成多列

MasterZM 2016-12-15 09:20:26
本人自己在看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;
}
}
如何将其封装。 请大神讲解,拜托了!
...全文
295 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xinweilee 2016-12-15
  • 打赏
  • 举报
回复
MainWindow中添加一个字段 Dictionary<string,CheckBox> checkDicts = new Dictionary<string,CheckBox>(); 构造函数中将checkbox添加到字典 checkDicts.Add(nameof(Employee.ID),idCheckBox); ... checkDicts.Add(nameof(Employee.BirthDate),birthdateCheckBox); 添加方法 bool CheckColumnVisible(string columnHeader) { if(checkDicts.ContainsKey(columnHeader)) { return checkDicts[columnHeader].IsChecked ; } return false; } GridProfucts_OnAutoGeneratingColumn方法中调用 private void GridProfucts_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { e.Cancel = !CheckColumnVisible(e.Column.Header.ToString()); }
xinweilee 2016-12-15
  • 打赏
  • 举报
回复
public partial class MainWindow : Window { ObservableCollection<Employee> employees = new ObservableCollection<Employee>(); Dictionary<string, CheckBox> checkDicts = new Dictionary<string, CheckBox>(); public MainWindow() { InitializeComponent(); //之前的初始化数据源的代码 checkDicts.Add(nameof(Employee.ID),idCheckBox); checkDicts.Add(nameof(Employee.Name), nameCheckBox); checkDicts.Add(nameof(Employee.IsMale), ismaleCheckBox); checkDicts.Add(nameof(Employee.Type), typeCheckBox); checkDicts.Add(nameof(Employee.SiteID), siteidCheckBox); checkDicts.Add(nameof(Employee.BirthDate), birthdateCheckBox); } private void GridProfucts_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { e.Cancel = !CheckColumnVisible(e.Column.Header.ToString()); } bool CheckColumnVisible(string columnHeader) { if (checkDicts.ContainsKey(columnHeader)) { return (bool)checkDicts[columnHeader].IsChecked; } return false; } }
MasterZM 2016-12-15
  • 打赏
  • 举报
回复
引用 1 楼 xinweilee 的回复:
MainWindow中添加一个字段
Dictionary<string,CheckBox> checkDicts = new Dictionary<string,CheckBox>();
构造函数中将checkbox添加到字典
checkDicts.Add(nameof(Employee.ID),idCheckBox);
...
checkDicts.Add(nameof(Employee.BirthDate),birthdateCheckBox);
添加方法
bool CheckColumnVisible(string columnHeader)
{
if(checkDicts.ContainsKey(columnHeader))
{
return checkDicts[columnHeader].IsChecked ;
}
return false;
}
GridProfucts_OnAutoGeneratingColumn方法中调用
private void GridProfucts_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
e.Cancel = !CheckColumnVisible(e.Column.Header.ToString());
}
是这样吗

4,818

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧