首页>Program>source

我正在尝试获取DataGrid中选定行的每一列的值.这就是我所拥有的:

private void dataGrid1_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    DataGrid dg = sender as DataGrid;
    Console.WriteLine(dg.SelectedCells[0].ToString());
}

但这不起作用.如果我做一个 SelectedCells.Count 那么我得到的列数正确,但是似乎无法实际获得所选行中这些列的值.我已经尝试了好久没有运气了! 这是我的XAML:

<Grid>
    <DataGrid CanUserAddRows="True" AutoGenerateColumns="False" Height="200" HorizontalAlignment="Stretch" Margin="12,12,79,0" Name="dataGrid1" VerticalAlignment="Top" Width="389" DataContext="{Binding}" CanUserResizeColumns="False" CanUserResizeRows="False" HorizontalContentAlignment="Stretch" PreviewMouseDoubleClick="dataGrid1_PreviewMouseDoubleClick" CellEditEnding="dataGrid1_CellEditEnding">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding  Path=UserID}"
                                Header="User ID" Width="SizeToHeader" />
            <DataGridTextColumn Binding="{Binding  Path=UserName}"
                                Header="User ID" Width="SizeToHeader" />
        </DataGrid.Columns>
    </DataGrid>
</Grid>

理想情况下,我想通过 rowData.UserID之类的方式访问数据 但我似乎无法解决.有很多使用DataGridView的教程和帮助,但我没有使用它。

最新回答
  • 2021-1-11
    1 #

    UPDATED

    要获取选定的行,请尝试:

    IList rows = dg.SelectedItems;
    

    然后,您应该能够从行项目中获取列值。

    OR

    DataRowView row = (DataRowView)dg.SelectedItems[0];
    

    然后:

    row["ColumnName"];
    

  • 2021-1-11
    2 #

    基于Tonys答案的解决方案:

           DataGrid dg = sender as DataGrid;
            User row = (User)dg.SelectedItems[0];
            Console.WriteLine(row.UserID);
    

  • 2021-1-11
    3 #

    我做了类似的事情,但我使用绑定来获取所选项目:

    <DataGrid Grid.Row="1" AutoGenerateColumns="False" Name="dataGrid"
              IsReadOnly="True" SelectionMode="Single"
              ItemsSource="{Binding ObservableContactList}" 
              SelectedItem="{Binding SelectedContact}">
      <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=Name}" Header="Name"/>
        <DataGridTextColumn Binding="{Binding Path=FamilyName}" Header="FamilyName"/>
        <DataGridTextColumn Binding="{Binding Path=Age}" Header="Age"/>
        <DataGridTextColumn Binding="{Binding Path=Relation}" Header="Relation"/>
        <DataGridTextColumn Binding="{Binding Path=Phone.Display}" Header="Phone"/>
        <DataGridTextColumn Binding="{Binding Path=Address.Display}" Header="Addr"/>
        <DataGridTextColumn Binding="{Binding Path=Mail}" Header="E-mail"/>
      </DataGrid.Columns>
    </DataGrid>
    

    所以我可以在ViewModel中访问我的SelectedContact.Name。

  • 2021-1-11
    4 #

    我相信没有直接属性可以访问所选 row的原因 wPF DataGrid之所以如此,是因为可以将DataGrid的选择模式设置为行级别或单元级别.因此,所有与选择相关的属性和事件都是针对单元格级别的选择而编写的-无论网格的选择模式如何,您始终会选择cells,但不能保证选择的< em>row。

    我不确切地知道您要通过处理CellEditEnding事件来实现什么,但是要在选择一行时获取所有选定单元格的值,请看一下处理SelectedCellsChanged事件.特别要注意该文章中的评论:

    You can handle the SelectedCellsChanged event to be notified when the collection of selected cells is changed. If the selection includes full rows, the Selector.SelectionChanged event is also raised.

    You can retrieve the AddedCells and RemovedCells from the SelectedCellsChangedEventArgs in the event handler.

    希望能帮助您走上正确的道路. :)

  • 2021-1-11
    5 #

    DataGrid获取选定行的列值,可以通过下面的代码进行访问.这里grid1是Gride的名称。

    private void Edit_Click(object sender, RoutedEventArgs e)
    {
        DataRowView rowview = grid1.SelectedItem as DataRowView;
        string id = rowview.Row[0].ToString();
    }
    

  • 超时XMLHttpRequest
  • mysql:检查表是否存在时间重叠?