WPF DataGrid: как определить текущий индекс строки?
Я пытаюсь реализовать очень простую функциональность таблиц на основе DataGrid.
-
Пользователь нажимает на ячейку
-
Пользователь вводит значение и нажимает return
-
Текущая строка сканируется, и всякая формула ячейки, которая зависит от щелкнутой ячейки, обновляется.
Это, по-видимому, лучший обработчик событий для моих требований:
private void my_dataGrid_CurrentCellChanged(object sender, EventArgs e)
Вопрос: Как определить индекс строки текущей строки?
Ответы
Ответ 1
Попробуйте это (если имя вашей сетки равно "my_dataGrid" ):
var currentRowIndex = my_dataGrid.Items.IndexOf(my_dataGrid.CurrentItem);
Обычно вы можете использовать my_dataGrid.SelectedIndex
, но кажется, что при событии CurrentCellChanged
значение SelectedIndex всегда отображает ранее выбранный индекс. Это конкретное событие, похоже, срабатывает до того, как значение SelectedIndex действительно изменится.
Ответ 2
привет, вы можете сделать что-то вроде этого, чтобы сделать ваш spreadsheed
//not recomended as it always return the previous index of the selected row
void dg1_CurrentCellChanged(object sender, EventArgs e)
{
int rowIndex = dg1.SelectedIndex;
}
но если вы хотите более продуманный пример, вы можете это сделать
namespace WpfApplication2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
ObservableCollection<Tuple<string,string>> observableCollection = new ObservableCollection<Tuple<string,string>>();
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 100; i++)
{
observableCollection.Add( Tuple.Create("item " + i.ToString(),"=sum (c5+c4)"));
}
dg1.ItemsSource = observableCollection;
dg1.CurrentCellChanged += dg1_CurrentCellChanged;
}
void dg1_CurrentCellChanged(object sender, EventArgs e)
{
//int rowIndex = dg1.SelectedIndex;
Tuple<string, string> tuple = dg1.CurrentItem as Tuple<string, string>;
//here as you have your datacontext you can loop through and calculate what you want
}
}
}
Надеемся на эту помощь
Ответ 3
GRD.Items.Count;
DataGridRow row = (DataGridRow) GRD.ItemContainerGenerator.ContainerFromIndex(i);
DataGridCell TXTGROUPID = GRD.Columns[2].GetCellContent(row).Parent as DataGridCell;
string str = ((TextBlock) TXTGROUPID.Content).Text;
MessageBox.Show(str);