从wpf datagrid获取隐藏值

时间:2015-10-29 11:22:58

标签: c# wpf datagrid

我可以从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

6 个答案:

答案 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获取值VisibleDataGrid列:

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>