如何获取WPF Datagrid的行索引?

时间:2014-02-17 09:22:52

标签: c# .net wpf c#-4.0

我在wpf datagrid中使用图像控制列。 如果单击,该控件用于删除datagrid中的行。任何人都可以告诉我如何冒泡控件click事件以选择网格的整行。以下是我现在的代码。

XAML代码:

  <DataGrid x:Name="dg" >
  <DataGrid.Columns>
 <DataGridTextColumn Header="ID"  Binding="{Binding Path=ZoneId}" />
<DataGridTextColumn Header="Sector" Binding="{Binding Path=SectorIds"/>
  <DataGridTemplateColumn Width="40">
     <DataGridTemplateColumn.CellTemplate >
              <DataTemplate>                                     
       <Image x:Name="imgDel"   Source="Delete.png" Stretch="None" MouseLeftButtonDown="imgDel_MouseLeftButtonDown" />
             </DataTemplate>                                    
            </DataGridTemplateColumn.CellTemplate>
           </DataGridTemplateColumn>
     </DataGrid.Columns>
    </DataGrid>

代码背后:

private void imgDel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{            
       var inx = dg.SelectedIndex;
}

我的要求是当我单击行中的图像控件时,它应该从datacontrol中删除整行。我的数据网格与一个集合绑定。

由于

3 个答案:

答案 0 :(得分:1)

您可以使用sender来获取行索引。

答案 1 :(得分:1)

我有一个实用工具方法,用于获取网格行/列。

public static Tuple<DataGridCell, DataGridRow> GetDataGridRowAndCell(DependencyObject dep)
{
    // iteratively traverse the visual tree
    while ((dep != null) && !(dep is DataGridCell) && !(dep is DataGridColumnHeader))
    {
        dep = VisualTreeHelper.GetParent(dep);
    }

    if (dep == null)
        return null;

    if (dep is DataGridCell)
    {
        DataGridCell cell = dep as DataGridCell;

        // navigate further up the tree
        while ((dep != null) && !(dep is DataGridRow))
        {
            dep = VisualTreeHelper.GetParent(dep);
        }

        DataGridRow row = dep as DataGridRow;

        return new Tuple<DataGridCell, DataGridRow>(cell, row);
    }

    return null;
}

可以像这样调用:

private void OnDoubleClick(object sender, MouseButtonEventArgs e)
        {
            DependencyObject dep = (DependencyObject)e.OriginalSource;

            Tuple<DataGridCell, DataGridRow> tuple = GetDataGridRowAndCell(dep);
        }

答案 2 :(得分:0)

如果您尝试获取图像所在的DataGridRow对象的引用,可以使用VisualTreeHelper来查找它。

private void imgDel_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{            
     DependencyObject dataGridRow = sender as DependencyObject;
     while (dataGridRow != null && !(dataGridRow is DataGridRow)) dataGridRow = VisualTreeHelper.GetParent(dataGridRow);
     if (dataGridRow!= null)
     {
           // dataGridRow now contains a reference to the row,
     }    
}