2016-04-09 3 views
0

У меня есть текстовое поле в datagrid. Данные берутся из базы данных. предположим, что у меня есть 10 строк с этим значением текстового поля. как только я нажимаю на эту строку, могу получить этот выбранный индекс строки. Моя цель состоит в том, что если значение текстового поля получает изменение, мне нужно определить, какая строка (какое значение) и выполнить некоторые вычисления на основе этого значения, тогда нужно отобразить другое поле той же строки. Поэтому я в состоянии узнать, какая из строк попала. `Я использую DataGrid со следующими декларациями:WPF-Как получить выбранный индекс строки в datagrid?

<dg:DataGrid Name="dgBudgetAllocation" CanUserDeleteRows="False" CanUserAddRows="False" CanUserSortColumns="True" 
         IsSynchronizedWithCurrentItem="True" MaxHeight="400" RowHeight="70" SelectionUnit="Cell" SelectedValue="" SelectionMode="Single" 
       AutoGenerateColumns="False" GridLinesVisibility="None" HeadersVisibility="Column" PreviewMouseDown="DgBudgetAllocation_OnPreviewMouseDown" SelectedCellsChanged="DgBudgetAllocation_OnSelectedCellsChanged" MouseDown="DgBudgetAllocation_OnMouseDown" PreviewMouseUp="DgBudgetAllocation_OnPreviewMouseUp" PreviewKeyDown="DgBudgetAllocation_OnPreviewKeyDown" HorizontalAlignment="Left"> 


         <dg:DataGridTemplateColumn Header="Budget Type" SortMemberPath="BUDGETYPE" 
             MinWidth="50" HeaderStyle="{DynamicResource dgHeaderLeftJust}" CellStyle="{DynamicResource dgColumnRightJust}"> 
       <dg:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock Text="{Binding BUDGETYPE}" HorizontalAlignment="left" VerticalAlignment="Top" Margin="0,0,3,0" /> 
        </DataTemplate> 
       </dg:DataGridTemplateColumn.CellTemplate> 

      </dg:DataGridTemplateColumn> 

Я попытался следующий фрагмент кода на основе различных человека внушению. для всех я получаю выбранный индекс -1.

DataRowView drv = (DataRowView)dgBudgetAllocation.SelectedItem; 
       object item = dgBudgetAllocation.SelectedItem; 
       string ID = (dgBudgetAllocation.SelectedCells[0].Column.GetCellContent(item) as TextBlock).Text; 
       DataGrid row1 = (DataGrid)dgBudgetAllocation.SelectedItems[1]; 
       var row = dgBudgetAllocation.SelectedItems[0]; 

Ничего не работает. Пожалуйста, предложите мне, как продолжить дальше.

ответ

2

cВыберите подписку на меняющееся событие выбора (SelectionChanged = "ItemsView_OnSelectionChanged") и используйте обработчик, чтобы получить все необходимое. Вы можете сделать это в поведении (и MVVM) или просто поместить обработчик внутри своего кода.

код обработчика Пример

private void ItemsView_OnSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var dg = sender as DataGrid; 
     if (dg == null) return; 
     var index = dg.SelectedIndex; 
     //here we get the actual row at selected index 
     DataGridRow row = dg.ItemContainerGenerator.ContainerFromIndex(index) as DataGridRow; 

     //here we get the actual data item behind the selected row 
     var item = dg.ItemContainerGenerator.ItemFromContainer(row); 

    } 

Позвольте мне знать, если вам нужно больше объяснений. С уважением.

+0

Его работы для меня. Спасибо много,. вы спасли много раз. Спасибо, много раз. – Santhosh