[WPF] WPF DataGird(데이터그리드) 특정 Row 컬러 변경하기

안녕하세요.

 

오늘은 WPF 에서 데이터그리드 컨트롤 다루는 방법에 대해서 알려 드리려고 합니다.

 

그 중에서도, 데이터그리드에서 특정 Row의 색상을 변경하는 방법에 대해서 알려 드리려고 합니다.

 

방법을 익히시면 두고두고 유용하게 사용하실 수 있을거라 생각합니다!

 

그럼 바로 예제 코드를 작성해서 어떻게 Row의 색상을 변경하는지 보여드리도록 하겠습니다.

 

MainWindow.xaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<Window x:Class="WpfApp6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp6"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="400">
    <Window.DataContext>
        <local:StudentViewModel/>
    </Window.DataContext>
    
    <StackPanel>
        <DataGrid 
                  Name="uiDataGrid_Main"
                  AutoGenerateColumns="true"
                  IsReadOnly="True"
                  VerticalAlignment="Stretch"
                  HorizontalAlignment="Stretch"
                  MouseLeftButtonUp="uiDataGrid_Main_MouseLeftButtonUp"
                  ItemsSource="{Binding Students, 
                                        UpdateSourceTrigger=PropertyChanged}"
                  ScrollViewer.CanContentScroll="True" 
                  ScrollViewer.HorizontalScrollBarVisibility="Visible" 
                  ScrollViewer.VerticalScrollBarVisibility="Auto"/>
    </StackPanel>
</Window>
 
cs

 

MainWindow.xaml.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
 
namespace WpfApp6
{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
 
        private void uiDataGrid_Main_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            StudentViewModel stu = new StudentViewModel();
            
            for(int index = 0; index < stu.Students.Count; index++)
            {
                DataGridRow row = (DataGridRow)uiDataGrid_Main.ItemContainerGenerator.ContainerFromIndex(index);
 
                if (row != null)
                {
                    if(stu.Students[index].Name.Equals("홍길동"))
                    {
                        SolidColorBrush brush = new SolidColorBrush(Color.FromArgb(20025500)); 
                        row.Background = brush;
                    }
                }
            }
        }
    }
}
 
cs

 

StudentViewModel.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System.Collections.ObjectModel;
using System.ComponentModel;
 
namespace WpfApp6
{
    public class StudentViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
 
        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(thisnew PropertyChangedEventArgs(propertyName));
            }
        }
 
        private ObservableCollection<Student> _student;
        public ObservableCollection<Student> Students
        {
            get
            {
                if (_student == null)
                {
                    _student = new ObservableCollection<Student>();
                }
                return _student;
            }
            set
            {
                _student = value;
                OnPropertyChanged("Students");
            }
        }
 
        public StudentViewModel()
        {
            Students.Add(new Student { Name = "홍길동", Age = "20", Address = "서울" });
            Students.Add(new Student { Name = "조길동", Age = "21", Address = "서울" });
            Students.Add(new Student { Name = "아길동", Age = "22", Address = "서울" });
            Students.Add(new Student { Name = "이길동", Age = "23", Address = "서울" });
            Students.Add(new Student { Name = "유길동", Age = "24", Address = "서울" });
            Students.Add(new Student { Name = "정길동", Age = "10", Address = "서울" });
            Students.Add(new Student { Name = "김길동", Age = "20", Address = "서울" });
            Students.Add(new Student { Name = "권길동", Age = "30", Address = "서울" });
            Students.Add(new Student { Name = "임길동", Age = "40", Address = "서울" });
            Students.Add(new Student { Name = "라길동", Age = "50", Address = "서울" });
        }
    }
 
    public class Student
    {
        public string Name { get; set; }
        public string Age { get; set; }
        public string Address { get; set; }
    }
}
 
cs

 

실행 결과

위와 같이 이름이 홍길동인 사람만 Row의 색상이 변경된 것을 확인하실 수 있습니다.

 

감사합니다.^^

728x90

이 글을 공유하기

댓글

Designed by JB FACTORY