2016-04-09 28 views
0

Veri kutusundaki datagrid'de var. Veri veri tabanından alıyor. Bu metin kutusu değeriyle 10 satır olduğunu varsayalım. Bu satıra tıkladığımda, bu seçili satır dizinini alabiliyorum. Hedefim, eğer textbox değeri değiştikten sonra, hangi satırın (hangi değer) olduğunu saptamalı ve bu değere göre bazı hesaplamalar yapmalı ve aynı satırın başka bir alanını görüntülemem gerekir. Yani hangi sıranın vurulacağını bilmek için bir pozisyondayım. `Ben şu beyanları ile veri kılavuzunu kullanıyorum:WPF- Seçili satır dizini datagrid'de nasıl seçilir?

<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> 

Çeşitli kişi öneri göre şu pasajı çalıştılar. tüm seçilen dizin için -1 alıyorum.

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]; 

Hiçbir şey çalışmıyor. Lütfen bana nasıl ilerleyeceğimi öner. Seçme değiştirme olayı için seçim yapın (SelectionChanged = "ItemsView_OnSelectionChanged") ve ihtiyacınız olan her şeyi almak için işleyiciyi kullanın.

cevap

2

Bunu davranışta (ve MVVM) yapabilir ya da işleyiciyi kodunuzun arkasına koyabilirsiniz.

bir işleyici kod örneği

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); 

    } 

daha açıklama ihtiyacı varsa söyleyin. Saygılar.

+0

Benim için çalışmaları. Çok teşekkürler,. çok zamanımı kurtardın. Tekrar çok teşekkürler . – Santhosh