Dla WinForms to:Uzyskiwanie wartość komórki w DataGrid w WPF
var value = DataGridView.Rows[0].Cells[0].Value
Czy istnieje jakiś sposób, aby dostać go w WPF?
Dla WinForms to:Uzyskiwanie wartość komórki w DataGrid w WPF
var value = DataGridView.Rows[0].Cells[0].Value
Czy istnieje jakiś sposób, aby dostać go w WPF?
Myślę, że najlepszym sposobem byłoby użyć właściwości przedmioty i bezpośrednio uzyskać dostęp do elementu danych:
var dataItem = dataGrid.Items[0] as ...;
ale można użyć tej klasy, aby uzyskać komórkę i dostęp do wartości z getValue() metoda (byłoby bardziej jak twój przykład).
Kod wzięty stąd: datagrid get cell index
static class DataGridHelper {
static public DataGridCell GetCell(DataGrid dg, int row, int column) {
DataGridRow rowContainer = GetRow(dg, row);
if (rowContainer != null) {
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);
// try to get the cell but it may possibly be virtualized
DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
if (cell == null) {
// now try to bring into view and retreive the cell
dg.ScrollIntoView(rowContainer, dg.Columns[column]);
cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
}
return cell;
}
return null;
}
static public DataGridRow GetRow(DataGrid dg, int index) {
DataGridRow row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(index);
if (row == null) {
// may be virtualized, bring into view and try again
dg.ScrollIntoView(dg.Items[index]);
row = (DataGridRow)dg.ItemContainerGenerator.ContainerFromIndex(index);
}
return row;
}
static T GetVisualChild<T>(Visual parent) where T : Visual {
T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++) {
Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null) {
child = GetVisualChild<T>(v);
}
if (child != null) {
break;
}
}
return child;
}
}
Generalnie, nie ma potrzeby, aby to zrobić. W WPF, datagrid ma być używany z powiązaniem danych, co oznacza, że istnieje bazowa kolekcja lub obiekt, który ma taką samą wartość jak komórka, więc musisz uzyskać bezpośredni dostęp do tego zbioru/obiektu. Jeśli chcesz uzyskać dostęp do wartości komórki, może być konieczne ponowne rozpatrzenie projektu.
Jak mówię każdemu deweloperowi WinForma, że znajduję jego głowę przeciwko WPF ... zapomnij wszystkiego, czego nauczyłeś się od WinForm, to jest inna (czasy lepsze IMO) i wymaga zupełnie innego sposobu myślenia. Spójrz na MVVM i poznaj możliwości wiązania WPF –