<WPF> Datagrid的详细用法
程序员文章站
2022-07-14 08:50:27
...
Datagrid使用
1. 前言
- 此篇博客是为了记录在写WPF前段时遇到的一个问题,以及其解决方案。
- 问题描述:
前端表格数据存于Datagrid表格中,此表格于其他表格相互关联,需要将所有表格数据进行全部导出和部分导出,则需要 ①添加复选框 增加全选功能 ② 读取每行的复选框 进行判断
由于没有学习过WPF,对于这个数据类型很陌生,所以查了很多资料,并记录下,方便今后使用的时候进行查找。
2. Datagrid
介绍
- 来自官方的介绍:
命名空间:System.Windows.Controls
程序集:PresentationFramework.dll
表示用于在可自定义的网格中显示数据的控件。public class DataGrid : System.Windows.Controls.Primitives.MultiSelector
- 其功能强大,可以包括很多数据类型在其中,故存储采用object类型。
使用
- 前端添加Datagrid表格项
<!--表头样式-->
<DataGrid.ColumnHeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Center"></Setter>
<Setter Property="Background" Value="Transparent"></Setter>
<Setter Property="Foreground" Value="black"></Setter>
<Setter Property="BorderThickness" Value="0.8" />
<Setter Property="BorderBrush" Value="#17acae" />
<Setter Property="FontSize" Value="18" />
</Style>
</DataGrid.ColumnHeaderStyle>
<!-- 绑定数据列 Bingding-->
<DataGridTextColumn Header="证件号" Binding="{Binding number}"/>
<DataGridTextColumn Header="注册日期" Binding="{Binding register_time}"/>
<DataGridTextColumn Header="姓名" Binding="{Binding name}"/>
<DataGridTextColumn Header="年龄" Binding="{Binding age}"/>
<DataGridTextColumn Header="备注" Binding="{Binding remark}"/>
</DataGrid.Columns>
</DataGrid>
- 后端增加绑定数据
//定义数据类
public class patient_form
{
public string patient_id { get; set; }
public string number { get; set; }
public string name { get; set; }
public string age { get; set; }
public string race { get; set; }
public string sex { get; set; }
public string register_time { get; set; }
public string weight { get; set; }//体重
public string education { get; set; }//教育
public string work { get; set; }//工作
public string genetic_history { get; set; }//遗传病史
public string disease_history { get; set; }
public string smoking { get; set; }
public string drinking { get; set; }
public string diatary { get; set; }
public string nature { get; set; }
public string remark { get; set; }
}
public Patient_Manager(int doctor_id)
{
//前面内容省略
ObservableCollection<patient_form> tmp_show = new ObservableCollection<patient_form>();
DataGrid_Info.ItemsSource = tmp_show; //将数据传入前端的Datagrid中 赋值操作
}
对Datagrid的行和列进行操作
- 增加列:
dt.Columns.Add(dataGrid.Columns[i].Header.ToString());
- 新建行:
System.Data.DataRow row = dt.NewRow();
- 给行赋值:
row[columnsIndex] = (dataGrid.Columns[j].GetCellContent(dataGrid.Items[i]) as TextBlock).Text.ToString();
- 把行加入到Datagrid:
dt.Add(row);
- 获取datatable的指定行指定列数据:
对象形式获取获取组件:
object item = DataGrid_Info.CurrentCell.Item;
//然后获取DataGridTemplateColumn单元格元素
FrameworkElement element = this.DataGrid_Info.Columns[0].GetCellContent(this.DataGrid_Info.Items[i]);
string类型获取: DataGridTemplateColumn templeColumn = DataGrid_Info.Columns[0] as DataGridTemplateColumn;
增加CheckBox
- 前端代码
<DataGrid.RowStyle></DataGrid.RowStyle> <!-- 表格行样式-->
<DataGrid.CellStyle></DataGrid.CellStyle> <!-- 表格单元格样式-->
<DataGrid.Columns> <!-- 在最前面增加一列 全选按钮 作为header-->
<DataGridTemplateColumn Header="选择" x:Uid="">
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Click="CheckAll_Click" >全选</CheckBox>//
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
<DataGridTemplateColumn.CellTemplate> <!-- 每行都增加一个复选框-->
<DataTemplate>
<!-- 对象的名称 用于后面获取对象 设置默认不选中 -->
<CheckBox Name="IsChecked" IsChecked="False">选择</CheckBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
- 控制全选
private void CheckAll_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show((All_Click_Tag == true) ? "全部设置为非选中!!" : "全部设置为选中!!");
All_Click_Tag = !All_Click_Tag;
CheckBox checkbox;
for (int row = 0; row < DataGrid_Info.Items.Count; ++row)//遍历行
{
//首先获取DataGridTemplateColumn所在列
DataGridTemplateColumn templeColumn = DataGrid_Info.Columns[0] as DataGridTemplateColumn;
if (templeColumn == null) continue;
//MessageBox.Show(templeColumn == null ? "templeColumn为空" : "templeColumn不为空");
object item = DataGrid_Info.CurrentCell.Item;
//然后获取DataGridTemplateColumn单元格元素
FrameworkElement element = this.DataGrid_Info.Columns[0].GetCellContent(this.DataGrid_Info.Items[row]);
//MessageBox.Show(element == null ? "element为空" : "element不为空");
//MessageBox.Show("找checkbox");
checkbox = (CheckBox)templeColumn.CellTemplate.FindName("IsChecked", element);//出问题
checkbox.IsChecked = All_Click_Tag;
}
}
上一篇: wpf DataGrid中的RadioButton
下一篇: 【java基础】之单例设计模式