从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;
 }

这不是一个选项,因为我在接收数据

从wpf数据网格获取隐藏值

时有tableadapter

您也可以在后台使用代码。您只需要以不同的方式隐藏列:

<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:中获得值HiddenVisible

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>