Выберите объект программно в WPF ListView

Обновление: Этот ответ касается общей классификации ошибок. Для более определенного ответа о том, как лучше всего обработать точный запрос OP, см. другие ответы на этот вопрос

MySQL In, Вы не можете изменить ту же таблицу, которую Вы используете в ИЗБРАННОЙ части.
Это поведение документируется в: http://dev.mysql.com/doc/refman/5.6/en/update.html

, Возможно, можно просто соединить таблицу с собой

, Если логика достаточно проста изменить запрос, потерять подзапрос и соединить таблицу с собой, используя соответствующие критерии выбора. Это заставит MySQL рассматривать таблицу как две разных вещи, позволяя разрушительным изменениям идти вперед.

UPDATE tbl AS a
INNER JOIN tbl AS b ON ....
SET a.col = b.col

, С другой стороны, вложение попытки подзапрос глубже в из пункта...

при абсолютной необходимости в подзапросе существует обходное решение, но это ужасно по нескольким причинам, включая производительность:

UPDATE tbl SET col = (
  SELECT ... FROM (SELECT.... FROM) AS x);

вложенный подзапрос в ИЗ пункта создает неявная временная таблица , таким образом, это не рассчитывает как та же таблица, Вы обновляете.

..., но не упускают оптимизатор запросов

, Однако остерегаются этого от MySQL 5.7.6 и вперед, оптимизатор может оптимизировать подзапрос, и все еще дать Вам ошибку. К счастью optimizer_switch переменная может использоваться для выключения этого поведения; хотя я не мог рекомендовать делать это как что-то большее чем кратковременное исправление этой ошибки, или для маленьких одноразовых задач.

SET optimizer_switch = 'derived_merge=off';

Благодаря Peter V. MГёrch для этого совета в комментариях.

метод В качестве примера был от Baron Schwartz, первоначально опубликован в Nabble, перефразируемом и расширенном здесь.

20
задан ASh 6 October 2018 в 09:35
поделиться

2 ответа

Привяжите свойство IsSelected элемента ListViewItem к свойству вашей модели. Затем вам нужно работать только со своей моделью, а не беспокоиться о тонкостях пользовательского интерфейса, который включает в себя потенциальные опасности, связанные с виртуализацией контейнеров.

Например:

<ListView>
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="IsSelected" Value="{Binding IsGroovy}"/>
        </Style>
    </ListView.ItemContainerStyle>
</ListView>

Теперь просто поработайте с IsGroovy вашей модели. свойство для выбора / отмены выбора элементов в ListView .

33
ответ дан 29 November 2019 в 23:48
поделиться

Вот мое лучшее предположение, что было бы гораздо более простым методом выбора. Поскольку я не уверен, что вы выбираете, вот общий пример:

var indices = new List<int>();

for(int i = 0; i < lstVariable_All.Items.Count; i++)
{
  // If this item meets our selection criteria 
  if( lstVariable_All.Items[i].Text.Contains("foo") )
    indices.Add(i);
}

// Reset the selection and add the new items.
lstVariable_All.SelectedIndices.Clear();

foreach(int index in indices)
{
  lstVariable_All.SelectedIndices.Add(index);
}

Я привык видеть настраиваемый элемент SelectedItem, но я вижу, что вы не можете установить или добавить к нему, но, надеюсь, этот метод работает как замена.

4
ответ дан 29 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: