wpf - 将控件添加到 WPF 中从 SQLite 数据库获取数据的 DataGrid 的自动生成的 ColumnHeader
问题描述
我需要为从 SQLite 数据库导入的数据创建一个类似 excel 的过滤器。
从数据库导入和显示数据做得很好
private void UpdateDataGrid(SQLiteConnection con, string sql)
{
DataSet dataSet = new DataSet();
SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(sql, con);
dataAdapter.Fill(dataSet);
dgMaterials.ItemsSource = dataSet.Tables[0].DefaultView;
}
AutoGenerateColumns 是真的,所以我得到这样的东西:
数据显示在左侧数据网格中。在右侧列表框中,我收集生成的列标题
private void dg_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
lb.Items.Add(e.Column.Header.ToString());
}
正如我所说,我想在这样的每个标题文本旁边的标题行中创建类似过滤器按钮的 excel
在 XAML 网站上,我是这样开始的
<DataGrid x:Name="dgMaterials"
IsReadOnly="True"
CanUserReorderColumns="False"
CanUserResizeColumns="False"
CanUserSortColumns="False"
DockPanel.Dock="Left" AutoGeneratingColumn="dg_AutoGeneratingColumn"
AlternatingRowBackground="LightGray">
... input a button next to every header text ...
</DataGrid>
标题中按钮的自动创建适用于:
private void dg_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
////string headertext = e.Column.Header.ToString();
//StackPanel sp = new StackPanel();
//TextBlock tb = new TextBlock();
//tb.Text = e.Column.Header.ToString();
//sp.Children.Add(tb);
dgMaterials.AutoGeneratingColumn += (ss, ee) =>
{
Button b = new Button() { Content = "...", Name = "btn_" + ee.PropertyName };
b.Click += HeaderFilterButtonClick;
StackPanel stackPanel = new StackPanel() { Orientation = Orientation.Horizontal };
stackPanel.Children.Add(new TextBlock() { Text = ee.PropertyName, VerticalAlignment = VerticalAlignment.Center });
//stackPanel.Children.Add(new Button() { Content = "...", Name = "btn_" + ee.PropertyName });
stackPanel.Children.Add(b);
ee.Column.Header = stackPanel;
};
lb.Items.Add(e.Column.Header.ToString());
}
谢谢@mm8
最后一个问题:
没有为第一列标题创建按钮,我不知道为什么:
想法?
解决方案
您可以在事件处理程序Header
中将列的属性设置为 a :Panel
AutoGeneratingColumn
dgMaterials.AutoGeneratingColumn += (ss, ee) =>
{
StackPanel stackPanel = new StackPanel() { Orientation = Orientation.Horizontal };
stackPanel.Children.Add(new TextBlock() { Text = ee.PropertyName, VerticalAlignment = VerticalAlignment.Center });
stackPanel.Children.Add(new Button() { Content = "..." });
ee.Column.Header = stackPanel;
};
推荐阅读
- javascript - 使用 Javascript 获取实际日期和时间
- javascript - 用回调函数解释函数
- python - Sympy:获取矩阵幂的列
- matlab - 如何让一些对象在空间中随机移动让我们说 [-5,5] 的网格
- dalvik - Dalvik 字节码检测 - 寄存器类型合并
- spring - 为依赖于其他项目的 Spring Boot 应用程序创建胖 jar 时出现异常
- sql - 在Oracle中连接两个表并多次返回一个列值
- sql-server - 通过从 SQL Server 中的行截断/删除类似信息来转换数据
- c# - 使用反射调用具有泛型类型参数的泛型方法
- python - 在 Celery 任务之间共享一个变量