我可以从DataGrid获取值隐藏列吗?
<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;
}
这不是一个选项,因为我在收到数据时有tableadapter
答案 0 :(得分:2)
你也可以使用你的代码。您只需要以不同的方式隐藏列:
<DataGridTextColumn Header="" MaxWidth="0" Binding="{Binding id}" />
即。删除Visibility
属性并将MaxWidth
设置为零。
答案 1 :(得分:1)
您有一个带有id字段的绑定,因此请使用它而不是访问单元格内容。
答案 2 :(得分:1)
我发现了两种方式
第一
string ID = ((DataRowView)DataGridService.SelectedItem).Row["id"].ToString();
第二
var data = (DataRowView)DataGridService.SelectedItem;
var userId = data.Row["id"];
答案 3 :(得分:0)
我提供了一个更简单的解决方案,假设您已将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>
在背后的代码中:
你绑定了ListeUrls的地方: ListeUrls.ItemsSource = new List {....};
private void DataGridCell_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
var dataGridCellTarget = (DataGridCell)sender;
var parent = VisualTreeHelper.GetParent(dataGridCellTarget);
.....
}
使用VisualTreeHelper获取触发鼠标双击的单元格的父级。父级具有YourClass的属性,因此是Id。
我认为不需要设置隐藏的DataGridColumn的宽度,将其Visibility设置为Hidden就足够了。
答案 4 :(得分:0)
首先将数据网格视图的选定项目转换为数据网格视图的ItemsSource
:
dataGridUser.ItemsSource is View_Users ==>
dataGridUser.ItemsSource = database.Database.SqlQuery<View_Users>(
"select * from view_users where 1=1"+searchString()).ToList();
然后,从Hidden
获取值Visible
或DataGrid
列:
var id= ((View_Users)dataGridUser.SelectedItem).UserID;
答案 5 :(得分:0)
</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>