【发布时间】:2020-05-06 08:36:01
【问题描述】:
我需要为从 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
最后一个问题:
没有为第一列标题创建按钮,我不知道为什么:
想法?
【问题讨论】:
-
你指的是什么
HeaderText?可能有几行但只有一个列标题。那么你想从哪里获取标题中的文本呢? -
@mm8 我不想引用自动生成的 HeaderText。这是我的问题:我从哪里获得标题文本?或者更确切地说,我需要它吗?我需要做的就是在每个 HeaderText 旁边添加一个按钮。