从wpf数据网格获取隐藏值
本文关键字:获取 隐藏 网格 数据网 wpf 数据 | 更新日期: 2023-09-27 18:19:48
我可以从DataGrid中获取值Hidden列吗?
<DataGridTextColumn Header="" Width="10" Binding="{Binding id}" Visibility="Hidden"/>
使用此代码,我得到异常。
Data.IdServ = ((TextBlock)DataGridService.Columns[1].GetCellContent(row)).Text;
if (dgUserEnroll.SelectedItem != null)
{
var data = (User)dgUserEnroll.SelectedItem;
var userID = data.UserId;
}
这不是一个选项,因为我在接收数据
您也可以在后台使用代码。您只需要以不同的方式隐藏列:
<DataGridTextColumn Header="" MaxWidth="0" Binding="{Binding id}" />
即移除CCD_ 1属性并将CCD_。
您有一个Binding with id字段,因此使用它而不是访问单元格内容。
我找到了两种方法
第一个
string ID = ((DataRowView)DataGridService.SelectedItem).Row["id"].ToString();
第二
var data = (DataRowView)DataGridService.SelectedItem;
var userId = data.Row["id"];
首先将所选数据网格视图项转换为数据网格视图的ItemsSource
:
dataGridUser.ItemsSource is View_Users ==>
dataGridUser.ItemsSource = database.Database.SqlQuery<View_Users>(
"select * from view_users where 1=1"+searchString()).ToList();
然后,从DataGrid
:中获得值Hidden
或Visible
列
var id= ((View_Users)dataGridUser.SelectedItem).UserID;
我提出了一个更简单的解决方案,假设您已将List绑定到Datagrid,YourClass具有XAML的Id属性:
<DataGrid x:Name="ListeUrls" AutoGenerateColumns="False" Margin="1,0,-1,27" >
<DataGrid.Resources>
<Style TargetType="{x:Type DataGridCell}">
<EventSetter Event="MouseDoubleClick" Handler="DataGridCell_MouseDoubleClick"/>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Id}" Visibility="Hidden"></DataGridTextColumn>
<DataGridTextColumn Header="Vendor" Binding="{Binding Vendor}" Foreground="red" FontWeight="Bold" ></DataGridTextColumn>
<DataGridTextColumn Header="Url" Binding="{Binding url}" ></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
在后面的代码中:
在您绑定ListUrl的某个位置:ListerUrls.ItemsSource=新列表{…};
private void DataGridCell_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var dataGridCellTarget = (DataGridCell)sender;
var parent = VisualTreeHelper.GetParent(dataGridCellTarget);
.....
}
您可以使用VisualTreeHelper来获取触发鼠标双击的单元格的父级。父类具有YourClass的属性,因此是Id.
我认为不需要设置隐藏的DataGridColumn的宽度,将其Visibility设置为hidden就足够了。
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Delete">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="delete" Width="40" Click="Delete_Click" Background="#FFD80000">
<materialDesign:PackIcon Kind="Delete" Width="25" Margin="-10,0,0,0" FontWeight="Bold"></materialDesign:PackIcon>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Edit">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button x:Name="edit" Width="40" Click="Edit_Click" Background="#FF673AB7">
<materialDesign:PackIcon Kind="Edit" Width="25" Margin="-10,0,0,0" FontWeight="Bold"></materialDesign:PackIcon>
</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<!--<DataGridTextColumn Width="300" Binding="{Binding [2]}" Header="Price"></DataGridTextColumn>-->
</DataGrid.Columns>