ANIL AYDINALP Ответов: 1

Как изменить цвет строки из datagrid по условию? Это важно для меня


это мой код для загрузки базы данных в datagrid
var data = from p in dc.ToplantiTalepFormus from c in dc.Onays where 
               (p.Toplanti_Talep_ID == c.Toplanti_Talep_ID &&
               (c.Talep_eden_ID==ID || c.User_ID == ID))
           select new 
           {
               p.Toplanti_Talep_ID, p.Toplanti_Talep_Tarihi, 
               p.Toplanti_Tarihi, p.Toplanti_Saat, 
               p.Toplanti_Konusu, p.Toplanti_Yeri,
               p.Toplanti_Şekli, p.Toplantı_Durumu, 
               c.Toplantı_Onay, c.Yeni_Tarih, 
               c.Yeni_Saat, c.DeğişiklikOnay ,c.User_ID
           };

foreach (var ToplantiTalepFormus in data)
{
    Datagrid.ItemsSource = data.ToList();
}


Что я уже пробовал:

но когда идентификатор пользователя = идентификатор пользователя или что-то еще, я хочу, чтобы строка была красной. Пожалуйста, помогите мне
private void Liste()
{
    ID = Convert.ToInt32(MainWindow.UserID);

    var data = from p in dc.ToplantiTalepFormus from c in dc.Onays where 
        p.Toplanti_Talep_ID == c.Toplanti_Talep_ID select new { p.Toplanti_Talep_ID,
        p.Toplanti_Talep_Tarihi, p.Toplanti_Tarihi, p.Toplanti_Saat,
        p.Toplanti_Konusu, p.Toplanti_Yeri, p.Toplanti_Şekli, p.Toplantı_Durumu,
        c.Toplantı_Onay, c.Yeni_Tarih, c.Yeni_Saat, c.DeğişiklikOnay, c.User_ID };

    foreach (var ToplantiTalepFormus in data)
    {
        if (ToplantiTalepFormus.User_ID == 1)
        {
            Datagrid.RowBackground = Brushes.Red;
        }
        Datagrid.ItemsSource = data.ToList();
    }
}

Graeme_Grant

or somthing else

Мы не можем читать твои мысли. Пожалуйста, обновите свой вопрос, объяснив, как вы хотите, чтобы это условие работало.

ANIL AYDINALP

вы можете увидеть мой код, когда он загружается моим кодом из вопроса, если это find user ID ==1, а затем сделать эту строку Красной, я имею в виду, что

ANIL AYDINALP

[код перешел к вопросу]
это я пытаюсь сделать, но когда я делаю

if (ToplantiTalepFormus.User_ID == 1)
{
    Datagrid.RowBackground = Brushes.Red;
}

он дает все строки красного цвета мне нужна только конкретная строка красного цвета

1 Ответов

Рейтинг:
0

Graeme_Grant

Этот WPF datagrid условный цвет строки - поиск Google[^] найдено: wpf-Как установить фон строки DataGrid на основе значения свойства с помощью Привязок данных - переполнение стека[^]

ОБНОВЛЕНИЕ: Поскольку вы не используете привязку данных,вот кодовая версия.

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Mock();
    }

    public ObservableCollection<Person> Persons { get; }
        = new ObservableCollection<Person>();

    private void Mock()
    {
        var rnd = new Random();

        for (int i = 0; i < 100; i++)
        {
            Persons.Add(new Person
            {
                Name = $"Person {i}", 
                Age = rnd.Next(20, 50)
            });
        }

        DataGrid1.LoadingRow += DataGrid1_LoadingRow;
        DataGrid1.ItemsSource = Persons;
    }

    private void DataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
    {
        var row = e.Row;
        var person = row.DataContext as Person;
        if (person.Age > 30 && person.Age < 40)
        {
            row.Background = new SolidColorBrush(Colors.Red);
        }
    }
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}


Обновление №2: Вот иерархическая версия DataGrid... Работает то же самое, только подключено немного по-другому...
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        Mock();
    }

    public ObservableCollection<Parent> Parents { get; }
        = new ObservableCollection<Parent>();

    private void Mock()
    {
        var rnd = new Random();

        for (int i = 0; i < 100; i++)
        {
            var parent = new Parent { Name = $"Parent {i}", Age = rnd.Next(20, 50) };

            for (int j = 0; j < 20; j++)
            {
                parent.Children.Add(new Person
                {
                    Name = $"Child {i}",
                    Age = rnd.Next(1, 10)
                });
            }

            Parents.Add(parent);
        }

        DataGrid1.LoadingRow += DataGrid1_LoadingRow;
        DataGrid1.ItemsSource = Parents;
    }

    private void DataGrid1_LoadingRow(object sender, DataGridRowEventArgs e)
    {
        var row = e.Row;
        var person = row.DataContext as Person;
        if (sender == DataGrid1)
        {
            if (person.Age > 30 && person.Age < 40)
            {
                row.Background = new SolidColorBrush(Colors.Red);
            }
        }
        else if (person.Age > 4 && person.Age < 6)
        {
            row.Background = new SolidColorBrush(Colors.Green);
        }
    }
}

public class Parent : Person
{
    public ObservableCollection<Person> Children { get; }
        = new ObservableCollection<Person>();
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

И XAML...
<Window

    x:Class="DataGridCodeBehindRowColorTrigger.MainWindow"

    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"



    mc:Ignorable="d"

    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"



    Title="CodeProject - DataGrid Custom Row Color"

    WindowStartupLocation="CenterScreen" Height="300" Width="600">
    <Grid>
        <DataGrid x:Name="DataGrid1"

                  GridLinesVisibility="None"

                  AlternatingRowBackground="GhostWhite" AlternationCount="1"

                  ScrollViewer.HorizontalScrollBarVisibility="Hidden"

                  AutoGenerateColumns="False" IsReadOnly="True"

                  RowDetailsVisibilityMode="VisibleWhenSelected"

                  VirtualizingPanel.ScrollUnit="Pixel">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Name"

                                    Binding="{Binding Name}"

                                    Width="*" />
                <DataGridTextColumn Header="Age"

                                    Binding="{Binding Age}"

                                    Width="70"/>
            </DataGrid.Columns>
            <DataGrid.RowDetailsTemplate>
                <DataTemplate>
                    <DataGrid ItemsSource="{Binding Children}"

                              LoadingRow="DataGrid1_LoadingRow"

                              GridLinesVisibility="None"

                              AlternatingRowBackground="GhostWhite"

                              AlternationCount="1"

                              ScrollViewer.HorizontalScrollBarVisibility="Hidden"

                              AutoGenerateColumns="False" IsReadOnly="True">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="Name"

                                                Binding="{Binding Name}"

                                                Width="*" />
                            <DataGridTextColumn Header="Age"

                                                Binding="{Binding Age}"

                                                Width="70"/>
                        </DataGrid.Columns>
                    </DataGrid>
                </DataTemplate>
            </DataGrid.RowDetailsTemplate>
        </DataGrid>

    </Grid>

</Window>


ANIL AYDINALP

это хорошо, но как насчет того, чтобы показать две таблицы в одной таблице и получить определенную строку красного цвета на кондиции

Graeme_Grant

Ты никогда не говорил о сложенных Датагридах. Ничем не отличается от первого. Привязка данных делает это намного проще.

Graeme_Grant

Взгляните на обновление

ANIL AYDINALP

могу ли я сделать с индексом строки вы это знаете

Graeme_Grant

Нет, насколько мне известно. Все 3 вышеперечисленных решения работают.