C# WPF DataGrid에 Row번호 출력 되는 칼럼 추가하기 (닷넷프레임워크 .net framework 4.0 기준)
닷넷5.0 이상 기준으로는
https://kaki104.tistory.com/808
DataGrid에 Row번호를 출력하기
별도의 3rd party 컨트롤을 사용하지 않는 경우 DataGrid를 많이 사용하는데, RowNumber를 출력하는 방법을 찾아보니 MVVM pattern에서 사용하기 쉬운 방법에 대해서 설명되어 있는 것이 없는 것 같아서 간
kaki104.tistory.com
이 글을 참고 하면 되지만, 닷넷프레임워크 4.0에서는 Microsoft.Xaml.Behaviors.Wpf 1.1.39를 설치할 수 없기 때문에 다음의 두 가지 방법이 있습니다.
비하인드 코드에서
/// <summary>
/// ListDetail.xaml에 대한 상호 작용 논리
/// </summary>
private void Loaded(object sender, RoutedEventArgs e)
{
AddNumberColumn(gridDataDetail);
}
private void AddNumberColumn(DataGrid dataGrid)
{
DataGridTextColumn numberColumn = new DataGridTextColumn
{
Header = "#",
Width = 40
};
numberColumn.Binding = new System.Windows.Data.Binding
{
Path = new PropertyPath("Items.IndexOf(Item)"),
RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(DataGrid), 1)
};
dataGrid.Columns.Insert(0, numberColumn);
}
코드 설명
이 코드는 .NET Framework 4.0에서 WPF (Windows Presentation Foundation)의 DataGrid 컨트롤에 행 번호 열을 추가하는 예제입니다. DataGrid는 테이블 형식의 데이터를 표시하는 데 사용되는 컨트롤입니다.
using System.Windows.Controls;: System.Windows.Controls 네임스페이스에 있는 클래스를 사용하기 위해 네임스페이스를 임포트합니다.
namespace DataGridNumberColumn: DataGridNumberColumn 네임스페이스를 정의합니다.
public class DataGridNumberColumn: DataGridNumberColumn 클래스를 정의합니다.
public static void AddNumberColumn(DataGrid dataGrid): AddNumberColumn 메서드를 정의합니다. 이 메서드는 DataGrid에 행 번호 열을 추가하는 역할을 합니다. 메서드는 DataGrid를 파라미터로 받습니다.
DataGridTextColumn numberColumn = new DataGridTextColumn: DataGridTextColumn 객체인 numberColumn을 생성합니다. 이 객체는 텍스트 기반의 열을 나타냅니다.
Header = "#": numberColumn의 헤더 (열 제목)를 "#"로 설정합니다.
Width = 40: numberColumn의 너비를 40으로 설정합니다.
numberColumn.Binding = new System.Windows.Data.Binding: numberColumn의 Binding을 설정합니다. 이를 통해 해당 열의 데이터 바인딩을 정의할 수 있습니다.
Path = new PropertyPath("Items.IndexOf(Item)"): 바인딩 경로를 설정합니다. "Items"는 DataGrid의 항목 컬렉션을 나타내며, "IndexOf(Item)"은 항목의 인덱스를 가져오는 것을 의미합니다.
RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(DataGrid), 1): 바인딩의 상대 소스를 설정합니다. 여기서는 DataGrid를 찾는 조상 요소를 찾습니다. "1"은 DataGrid로부터 한 단계 위 조상을 찾도록 설정합니다.
dataGrid.Columns.Insert(0, numberColumn);: dataGrid의 Columns 컬렉션에 numberColumn을 첫 번째 열로 삽입합니다. 이렇게 하면 DataGrid에 행 번호 열이 추가됩니다.
xaml에서
<DataGrid x:Name="gridDataDetail" AutoGenerateColumns="True">
<!-- 행 헤더를 정의 -->
<DataGrid.RowHeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=DataContext.RowNumber}" />
</DataTemplate>
</DataGrid.RowHeaderTemplate>
</DataGrid>
위의 예시는 DataGrid.RowHeaderTemplate를 사용하여 행 헤더를 커스텀하게 정의하고, 텍스트 블록을 이용하여 행 번호를 표시하도록 설정합니다.