2011-08-21 5 views
1

WPF의 DataGrid에서 선택된 행 값을 가져 오려고하는데 매우 실망 스럽습니다. WinForms에서는 간단합니다.선택한 행 값 가져 오기

선택한 또는을 wpf의 DataGrid 컨트롤에서 지정된 단일 행 값으로 가져올 수 있습니까?

나는 온라인에서 찾은 몇 가지 스 니펫을 사용했으며 모두 열 이름을 포함하여 전체 행의 내용을 제공합니다. 내가 시도

:

나는 WPF 컨트롤 섹션에서 MSDN에보고했지만 난 아무데도 행 값을 얻을 수있는 방법을 볼 수 없습니다
string value = dataGrid1.SelectedItems[0].ToString(); 

string value = dataGrid1.SelectedCells[dataGrid1.SelectedItems[0]].ToString(); 

.

내가 계속 돌아 오는 이유는 다음과 같습니다. { OrderId = d#dfuzJRo , UserId = 56, OrderTotal = , Freight = , DeliveryStatus = , OrderStatus = Pending, TransactionId = , OrderDate = 16/08/2011 9:12:00 PM } - 그게 내가하는 일이 아닙니다.

행을 두 번 클릭하면 OrderId를 가져오고 싶습니다.

<DataGrid AutoGenerateColumns="True" Name="dataGrid1" DataContext="{Binding}" ItemsSource="{Binding}" HorizontalGridLinesBrush="#4D0090FF" VerticalGridLinesBrush="#A30091FF" AlternatingRowBackground="#200098FF" BorderThickness="0" ClipToBounds="False" MouseDoubleClick="dataGrid1_MouseDoubleClick" Margin="0,25,0,0" VerticalAlignment="Stretch"></DataGrid> 

그리고 성공적으로 DB 정보를 얻고처럼 (MSDN 튜토리얼의 해제 기준) :

내 XAML는 설정처럼

private void ViewOrders() 
    { 
     ObjectQuery<Order> orders = dEntities.Orders; 

     var query = from order in orders 
        orderby order.OrderStatus 
        select new 
        { 
         order.OrderId, 
         order.UserId, 
         order.OrderTotal, 
         order.Freight, 
         order.DeliveryStatus, 
         order.OrderStatus, 
         order.TransactionId, 
         order.OrderDate 
        }; 
     dataGrid1.ItemsSource = query.ToList(); 
    } 
+1

'SelectedItem'과 정확히 무슨 관련이 있습니까? 상세한 답변을 원할 경우 몇 가지 세부 정보를 제공하십시오. 너는 무엇에 묶여 있고 어떻게? –

+0

고마워요. @Henk, 내 코드와 내 질문 등을 업데이트했습니다. – bendr

+1

'Order order = dataGrid.SelectedItem as Order'를 시도한 다음'var orderId = order.OrderId'를 시도 했습니까? –

답변

3

확인, 간단한 SelectedItem 또는 SelectedItems[0] 당신에게 줄 것이다 행. 그러나 행은 익명 유형이므로 OrderID을 조금 어렵게 만듭니다.

간단한 접근 방식은 단순히 order 항목을 선택하여 표시하는 것입니다. 표에 열 정의를 설정하여 표시 할 특성을 선택하십시오.

대안은 class DisplayOrder을 정의하고 LINQ 쿼리 변경하는 것입니다 : 두 경우 모두

select new DisplayOrder 
    { 
     order.OrderId, 
     ... 
    }; 

을, 당신은 단순히 그리드에서 SelectedItem.OrderID에 액세스 할 수 있습니다.

var row = (DisplayOrder) datagrid1.SelectedItem; // or (Order) 
    int Id = row.OrderID; 
+0

좋은 해결책입니다. 대단히 감사합니다 @ 헹크. :) – bendr

관련 문제