Как выделить строку только программно - PullRequest
0 голосов
/ 04 июня 2019

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

Получить выбранный элемент строки в DataGrid WPF

Пытался достичь результата

Ответить

ответил 19 апреля '11 в22:01 от Bahaa Salaheldin

был наиболее полезен

Но что происходит, когда я прокручиваю вниз, выбранная строка постоянно появляется, я думаю, из-за подхода «ContainerFromItem».Можно ли программно изменить фон DataGrid?- только в коде C #?Я попытался немного поиграть с ... выбранным индексом, и это не так просто, как в WindowsForms.Поэтому я попытался выяснить, как выполнить выделение.Я использую: DataTable в DataObject, который связан элементами DataGrid. Soruce - это dataObject.DataTable. Я знаю, что должен выполнить .Background = Brushes./ Выбранный элемент / SelectedItems и свойство Background Спасибо.

11/06/19 Дополнительная информация добавлена:

Здесь я публикую пример кода, но этот код работаетдля оконных форм я думал, что смогу сделать что-то подобное.

 foreach (DataGridViewRow row in dgvNetlist.Rows)
            {

                if (row.Cells[2].Value.ToString().Contains(Messages.SingleConnection))
                    row.DefaultCellStyle.BackColor = databaseColor[0];                     //error color                    
                else if (row.Cells[2].Value.ToString().Contains(Messages.MissingTP))
                    row.DefaultCellStyle.BackColor = databaseColor[1];                    
                else if (row.Cells[2].Value.ToString().Contains(Messages.MissingConnection))//if message cell contains missing connections
                    row.DefaultCellStyle.BackColor = databaseColor[2];                    
                else if (row.Cells[2].Value.ToString().Contains(Messages.MultipleTPs) && cbHideMultipleTPs.Checked == false)  //if message cell contains multiple TPs
                    row.DefaultCellStyle.BackColor = databaseColor[3];
                else if (row.Cells[2].Value.ToString().Contains(Messages.EmptyNet))      //if message cell contains Empty net
                    row.DefaultCellStyle.BackColor = databaseColor[0]; 
                else
                    row.DefaultCellStyle.BackColor = databaseColor[4];                  //OK color

                if (row.Cells[4].Value.ToString().Equals("True"))                       //if row is marked -> marked color
                    row.DefaultCellStyle.BackColor = databaseColor[5];
                i++;
            }

Но, например, по собственным правилам пользователь должен «сохранить» какую-то строку, он хочет выделить строку.То, что я хочу сделать, состоит в следующем:

1) Получить идентификатор элемента из выбранной строки ... Идентификатор элемента Я имею в виду исходный идентификатор в таблице, например, номер идентификатора 950
2) выполнить действие выделениянапримерфон для разного цвета.3) сохранить идентификатор в настройках пользователя, потому что у каждого пользователя могут быть выделены разные строки

4) при запуске другого приложения используйте некоторый цикл для поиска сохраненных строк (не имеет значения, есть ли в базе данных больше или меньше элементов)) и выделите строки - не имеет значения, как они упорядочены - выделение зависит от идентификатора элемента ...

Я думал, что это как-то возможно, пока я могу получить идентификатор из таблицы данных-> выбранный элемент

но я не нашел способа сделать это, как в приведенном выше коде.

Надеюсь, это прояснит ситуацию

1 Ответ

1 голос
/ 04 июня 2019

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

    <Style TargetType="{x:Type ContentControl}">
        <Setter Property="Visibility" Value="Collapsed"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}" Value="True">
                <Setter Property="Background" Value="Red"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

ОБНОВЛЕНИЕ: Если вы хотите сделать это программно, вы можете создать привязку в коде, где Listboxitem - это список, содержащий элемент, а SelectedToBackgroundConverter - конвертер, который реализует правила, упомянутые в вашем посте. .

        gridLine.SetBinding(BackgroundProperty, new Binding(nameof(IsSelected)) { Source = ListBoxItem, Converter = new SelectedToBackgroundConverter() });

Выполнение этого в коде, однако, намного сложнее, чем использование xaml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...