【发布时间】:2021-08-13 23:49:10
【问题描述】:
我有一个 WPF 数据网格,我在其中使用 itemsource 填充数据表中的数据。现在我想为我的 Datagrid 应用文本框过滤器或(如果可能,将过滤器应用到列标题)。我对 WPF 很陌生,所以任何人都可以帮我解决这个问题。
注意:我没有使用 MVVM,我只是使用简单的 WPF 数据网格
Currently my code is like below:
XAML Code:
-------------------
<Page.Resources>
<LinearGradientBrush x:Key="HeaderBrush" StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#FF6B6EB9" Offset="0"/>
<GradientStop Color="#FF6B6EB9" Offset="1"/>
<GradientStop Color="#FF6B6EB9" Offset="0.509"/>
<GradientStop Color="#FF6B6EB9" Offset="0.542"/>
<GradientStop Color="#FF6B6EB9" Offset="0.542"/>
<GradientStop Color="#FF9699DC" Offset="0.904"/>
</LinearGradientBrush>
<LinearGradientBrush x:Key="HeaderBorderBrush" StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Color="#FF1060D1" Offset="0.614"/>
<GradientStop Color="#FF316BD5" Offset="0.853"/>
<GradientStop Color="#FFBBD3ED" Offset="1"/>
</LinearGradientBrush>
<Style x:Key="HeaderStyle" TargetType="DataGridColumnHeader">
<Setter Property="Background" Value="{StaticResource HeaderBrush}" />
<Setter Property="Foreground" Value="White" />
<Setter Property="BorderBrush" Value="{StaticResource HeaderBorderBrush}" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="MinWidth" Value="0" />
<Setter Property="MinHeight" Value="30" />
<Setter Property="Cursor" Value="Hand" />
</Style>
</Page.Resources>
<Grid>
<DataGrid Name="dgExcel" LoadingRow="dgExcel_LoadingRow" RowEditEnding="dgExcel_RowEditEnding" ColumnHeaderStyle="{StaticResource HeaderStyle}" CanUserDeleteRows="True" AutoGenerateColumns="True" AutoGeneratingColumn="dgExcel_AutoGeneratingColumn" ItemsSource = "{Binding}" ColumnWidth="Auto" SelectionChanged="dgExcel_SelectionChanged" CanUserAddRows="True" Loaded="dgExcel_Loaded" CellEditEnding="dgExcel_CellEditEnding" ScrollViewer.CanContentScroll="True" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" GridLinesVisibility="Horizontal" AlternatingRowBackground="#FFF3F3F3">
</DataGrid>
</Grid>
加载wpf数据网格的代码文件:
private void dgExcel_Loaded(object sender, RoutedEventArgs e)
{
string ConeectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\\Test.xlsx';" + "Extended Properties=\"Excel 12.0 Xml;HDR=YES\"");
OleDbConnection oconn = new OleDbConnection(ConeectionString);
System.Data.DataSet DtSet;
System.Data.OleDb.OleDbDataAdapter MyCommand;
MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", oconn);
MyCommand.TableMappings.Add("Table", "TestTable");
DtSet = new System.Data.DataSet();
MyCommand.Fill(DtSet);
dgExcel.DataContext = DtSet.Tables[0];
System.Data.DataTable dt = new System.Data.DataTable();
//actionsGrid.ItemsSource = DtSet.DefaultViewManager;
dt = DtSet.Tables[0];
dgExcel.ItemsSource = dt.DefaultView;
oconn.Close();
}
【问题讨论】: