Мне нужно создать фильтр типа Excel для моих данных, импортированных из базы данных SQLite.
Импорт и отображение данных из базы данных хорошо работают с
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
последняя проблема:
кнопка не создается для заголовка первого столбца, и я не знаю почему:
идей?