Вот ситуация: мне нужно привязать WPF FixedPage к DataRow. Привязки не работают против DataRows; они работают против DataRowViews. Мне нужно сделать это наиболее общим способом, так как я ничего не знаю и не могу контролировать то, что находится в DataRow.
Мне нужно иметь возможность получить DataRowView для данного DataRow. Я не могу использовать метод Find() на DefaultView, потому что он принимает ключ, и нет гарантии, что таблица будет иметь набор первичных ключей.
Есть ли у кого-нибудь предложение, как лучше всего обойти это?





row.Table.DefaultView[row.Table.Rows.IndexOf(row)]
Это нормальный ответ. Но если вы окажетесь в такой ситуации, вам следует подумать о том, чтобы больше узнать о DataView и о том, как они используются, а затем реорганизовать свой код, чтобы он был ориентирован на представление, а не на таблицы.
@JoelBarsotti: Если вы не удалите сортировку / фильтры перед этим, после чего вы можете повторно добавить их. Но приятный улов. Если у вас есть лучший ответ, пожалуйста, предоставьте его, и (если он работает) я буду рад выбрать его как лучший.
Не совсем привлекательный фрагмент кода, но это не похоже на автоматический способ поиска строки без простого зацикливания таблицы.
DataRowView newRowView = null;
foreach (DataRowView tempRowView in myDataTable.DefaultView)
{
if (tempRowView.Row == rowToMatch)
newRowView = tempRowView;
}
if (newRow != null)
UseNewRowView(newRowView);
else
HandleRowNotFound();
Эй, это заняло у меня всего 4-5 лет.
Это не очень хорошая идея, если представление по умолчанию было отфильтровано, индексы могут не совпадать.