首頁>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的教程和帮助,但我没有使用它。

最新回復
  • 5月前
    1 #

    UPDATED

    要获取選定的行,請尝試:

    IList rows = dg.SelectedItems;
    

    然後,您應该能够从行專案中获取列值。

    OR

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

    然後:

    row["ColumnName"];
    

  • 5月前
    2 #

    基於Tonys答案的解決方案:

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

  • 5月前
    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。

  • 5月前
    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.

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

  • 5月前
    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:檢查表是否存在時間重叠?