2012-10-01 1 views
0

사람들 내가 백만 번 답변을 받았지만 데이터 그리드에서 선택한 행의 값을 얻는 방법을 알고 있습니까? 나는 노력했지만 시도했지만 운이 전혀 없었다. datagrid에 databind 괜찮아요, 내가 selectedCellsChanged 이벤트를 사용하지만 그 막혀 얻을. 다음과 같이DataGrid 값 가져 오기

내 코드는 다음과 같습니다 -

XAML 

    <Window x:Class="main.results" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      Title="results" Height="500" Width="650"> 
     <Window.Resources> 
      <DataTemplate x:Key="LocationsTemplate"> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Path=CLIENTNAME}" /> 
        <TextBlock Text=" | " /> 
        <TextBlock Text="{Binding Path=POSTCODE}" /> 
        <TextBlock Text=" | " /> 
        <TextBlock Text="{Binding Path=CONTRACT NUMBER}" /> 
       </StackPanel> 
      </DataTemplate> 
     </Window.Resources> 
     <Grid> 
      <DataGrid AutoGenerateColumns="False" Height="125" HorizontalAlignment="Left" Margin="16,12,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="600" ItemsSource="{Binding}" HorizontalGridLinesBrush="#FF7907C1" VerticalGridLinesBrush="#FF7907C1" SelectionMode="Single" SelectedCellsChanged="dataGrid1_SelectedCellsChanged"> 
       <DataGrid.Columns> 
        <DataGridTextColumn Binding="{Binding CLIENTNAME}" Header="CLIENT NAME" /> 
        <DataGridTextColumn Binding="{Binding CLIENTNAME}" Header="POSTCODE" /> 
        <DataGridTextColumn Binding="{Binding CONTRACT NUMBER}" Header="CONTRACT NUMBER" /> 
       </DataGrid.Columns> 
      </DataGrid> 
     </Grid> 
    </Window> 

C# 

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Windows; 
    using System.Windows.Controls; 
    using System.Windows.Data; 
    using System.Windows.Documents; 
    using System.Windows.Input; 
    using System.Windows.Media; 
    using System.Windows.Media.Imaging; 
    using System.Windows.Shapes; 
    using System.Data; 
    using System.Data.SqlClient; 
    using System.Data.Linq; 
    using System.Data.SqlTypes; 

    namespace main 
    { 
     /// <summary> 
     /// Interaction logic for results.xaml 
     /// </summary> 
     public partial class results : Window 
     { 
      public results() 
      { 
       InitializeComponent(); 
      } 

      private void dataGrid1_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e) 
      { 
       **//HOW DO I GET THE VALUES FROM SELECTED ROW?** 
      }   
     } 
    } 
+1

질문 하나 먼저 열 값을 얻기 위해 행을 다음

dr["columnName"];를 얻을 수 var dr = (DataRowView)dataGrid1.SelectedItem;을 사용할 수 있습니다 : 당신은 왜 물건을 결합 할 'SelectedCellsChanged' 이벤트를 사용합니까? 이 이벤트 핸들러의 목적은 무엇입니까? 아마도 더 깨끗한 방법이있을 것입니다. – Damascus

+0

안녕하세요 다마스커스, 나는 데이터 그리드를 사용하여 사용자에게 클라이언트를 선택하고 계약 번호를 사용하여 일련의 양식을 채울 수있는 기회를 제공했습니다. 너는 무엇을 제안 하겠는가? – ullevi83

+0

Binding을 사용하면 MVVM에서 작업하고 있다고 가정합니다. 그렇기 때문에 폴의 해결책은 확실히 작동하지만 MVVM 모델에 대한 대대적 인 적용이 될 것입니다! 이것을하기위한 확실한 방법은'SelectedItem'을 바인드하고'ViewModel'에서 폼을 생성/새로 고치기위한 로직을 정의하는 것입니다. 코드 숨김에서'DataGrid'를 조작하면 MVVM이 망가질뿐 아니라'DataGrid' 아키텍처에도 위배된다는 것을 명심하십시오. – Damascus

답변

1

당신은

+0

ha ha it it, 솔직히 내가 이걸로 놀고있는 시간의 양을! 도와 줘서 고마워. – ullevi83

+0

여기서는 무례한 것은 아니지만이 방법이 효과가있는 동안 분명히'SelectedItem'을 다루는 "깨끗한"방법은 아닙니다. 간단한'Binding'이 매우 권고됩니다. – Damascus