我已经尝试了几种返回当前行索引值的方法,但到目前为止所有建议都不被接受为我环境中的有效代码。我想获得焦点行的索引值或通过我插入的行按钮。这是我的测试代码 - 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;
}
答案 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.MouseUp
或DataGrid.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);
}