c#wpf datagrid行索引

时间:2017-04-13 08:09:37

标签: c# wpf datatables

我已经尝试了几种返回当前行索引值的方法,但到目前为止所有建议都不被接受为我环境中的有效代码。我想获得焦点行的索引值或通过我插入的行按钮。这是我的测试代码 - XAML

<DataGrid x:Name="dataGrid1"  Loaded="WhenLoaded" AutoGenerateColumns="False" Margin="0,0,478,274" SelectionMode="Single" SelectionChanged="dataGrid1_SelectionChanged" >
    <DataGridTemplateColumn>
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Button Name="Select" Click="Row_Click" Content="Select" />
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
    <DataGridTextColumn Header="node" Binding="{Binding Path=NODE}"   />
    <DataGridTextColumn Header="name" Binding="{Binding Path=NAME}"  />
    <DataGridTextColumn Header="s/n" Binding="{Binding Path=SERIAL_NO}"  />
</DataGrid.Columns>

C#

        myDataSet.Tables.Add(myTable);
        myDataSet.Tables.Add(myTable2);  

        myTable.Columns.Add("NODE", typeof(string));
        myTable.Columns.Add("NAME", typeof(string));
        myTable.Columns.Add("SERIAL_NO", typeof(string));

        myTable.Rows.Add(new string[] { "99", "Pressure", "1234" });

        dataGrid1.ItemsSource = myTable.DefaultView;    

我尝试使用此方法访问索引但无法识别RowIndex和ColumnIndex -

private void Row_Click(object sender, RoutedEventArgs e)
    {
        int row = dataGrid1.CurrentCell.RowIndex;
        int col = dataGrid1.CurrentCell.ColumnIndex;
    }

2 个答案:

答案 0 :(得分:0)

使用SelectedIndex属性:

    private void Row_Click(object sender, RoutedEventArgs e)
    {
        var selectedRowIndex = dataGrid1.SelectedIndex

    }

或者,您可以从当前单元格获取行索引(虽然有点多余):

var row = (DataGridRow)dataGrid1.ItemContainerGenerator
          .ContainerFromItem(dataGrid1.CurrentCell.Item);
Console.WriteLine(row.GetIndex());

wpf DataGridCell上没有列索引,但您可能会得到DisplayIndex(请注意,当列重新排列时,它可能会更改)

Console.WriteLine(dataGrid1.CurrentCell.Column.DisplayIndex);

如果您想知道自己要访问的数据中的哪个列/属性,则需要根据DisplayIndex以外的其他内容(例如CurrentCell.Column.Header上)找到它

如果您想在不在列中添加按钮的情况下获取索引,则可以使用例如DataGrid.MouseUpDataGrid.MouseLeftButtonUp个事件。

您可以找到更深入的解释here

答案 1 :(得分:0)

private void Row_Click(object sender, RoutedEventArgs e)
{
      DataRowView dataRow = (DataRowView)dataGrid1.SelectedItem;          
      string cellValue_Method1 = dataRow.Row.ItemArray[3].ToString();
      string cellValue_Method2 = dataRow[0].ToString();
      int index = dataGrid1.CurrentCell.Column.DisplayIndex;
      MessageBox.Show("index "+index + " cell value frist from method: "+cellValue_Method1 + " cell value from second method: "+cellValue_Method2);
}