wpf - 如何访问 wpf 中数据网格列标题内的文本框?
问题描述
我是 WPF 的新手。因为我已经在我的数据网格列标题中添加了一个文本框列以实现搜索功能。我无法访问项目中数据网格内的文本框名称。
我的 XAML:
<DataGrid DataContext="{Binding Details}" Name="g1" ItemsSource="{Binding}" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding BrokerCode , UpdateSourceTrigger=PropertyChanged}" HeaderStyle="{StaticResource CenterGridHeaderStyle}" Header="Broker Code" x:Name="BrokerCode" Width="100" >
<DataGridTextColumn.HeaderTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<Label VerticalAlignment="Center" HorizontalContentAlignment="Center" HorizontalAlignment="Center" Content="Broker Code" />
<TextBox x:Name="NameTextBox" MinWidth="100" TextChanged="SearchTextBox_TextChanged" Text="{Binding Filter, ElementName=mainwindow, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay }"/>
</StackPanel>
</DataTemplate>
</DataGridTextColumn.HeaderTemplate>
</DataGridTextColumn>
</Datagrid>
我的C# :
SqlConnection con = new SqlConnection();
con.ConnectionString =
ConfigurationManager.ConnectionStrings["connEmployee"].ConnectionString;
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "select BrokerCode from [SMAFI]";
cmd.Connection = con;
SqlDataAdapter adapter1 = new SqlDataAdapter(cmd);
DataTable dt1 = new DataTable("SMAFI");
var getdata = adapter1.Fill(dt1);
List<Details> details = new List<Details>();
details = (from DataRow row in dt1.Rows
select new Details()
{
BrokerCode = row["BrokerCode"].ToString()
}).ToList();
g1.ItemsSource = details;
details = details.Where(x =>
x.BrokerCode.ToLower().StartsWith(NameTextBox.Text.ToLower())).ToList();
g1.ItemsSource = details;
我在后面的代码中编写了 textchange 事件,我想在我的 C# 中访问“NameTextBox”(文本框的名称)。请帮帮我。
解决方案
DataGridColumn.Header
接受任何类型的内容,甚至是其他控件。而不是使用 a DataTemplate
,只需将TextBox
直接放入列的标题中:
<DataGrid DataContext="{Binding Details}" Name="g1" ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding BrokerCode , UpdateSourceTrigger=PropertyChanged}" HeaderStyle="{StaticResource CenterGridHeaderStyle}" x:Name="BrokerCode" Width="100">
<DataGridTextColumn.Header>
<StackPanel Orientation="Vertical">
<Label VerticalAlignment="Center" HorizontalContentAlignment="Center" HorizontalAlignment="Center" Content="Broker Code" />
<TextBox x:Name="NameTextBox" MinWidth="100" TextChanged="SearchTextBox_TextChanged" Text="{Binding Filter, ElementName=mainwindow, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</StackPanel>
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
这将允许您TextBox
按名称访问。DataTemplate
注意:只要设置RelativeSource
正确,绑定仍然可以使用该方法。
推荐阅读
- python - 如何在机器学习算法中输入提取的 MFCC 特征?
- java - 一个阶段绘制多个表格
- c++ - 为什么这个串行/调制解调器代码会弄乱我的终端显示?
- python - 我如何将文件的路径发布到 tkinter 中的 entry()
- html - 滚动后使悬停的div保持在相同的位置
- jupyter-notebook - 无需鼠标点击的 Jupyter 笔记本降价
- python - RegEx 用于捕获和替换模式中的数字
- c# - 托管的 .Net 应用程序无法访问 Google 云 VPC 托管的 Solr 搜索
- scala - 如何过滤掉火花数据框中的布尔字段?
- python - 如何将一系列较小的大小连接到熊猫数据框的底部