[C# / WPF] DataGrid 초기 Binding 시 빈 행(Row) 혹은 중복 열(Column) 제거 방법





이번 포스팅에서는 WPF의 DataGrid에 DataTable을 다음과 같이 바인딩할 때 발생하는 문제에 대해 다룹니다.

    "DataGrid명".ItemSource = "DataTable명".ItemSource



1. DataGrid Control 생성

[.xaml]
<DataGrid x:Name="mainGrid" Grid.Row="0" Grid.Column="1"  Margin="5,5">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Fruit" Binding="{Binding Path=Fruit}" Width="100"/>
        <DataGridTextColumn Header="Price" Binding="{Binding Path=Price}" Width="100"/>
    </DataGrid.Columns>
</DataGrid>

[결과]


2. 데이터 바인딩

[코드]
public MainWindow()
{
 InitializeComponent();

 DataTable dt_Products = new DataTable();

 dt_Products.Columns.Add(new DataColumn("Fruit"));
 dt_Products.Columns.Add(new DataColumn("Price"));

 DataRow dr = dt_Products.NewRow();
 dr["Fruit"] = "Apple";
 dr["Price"] = "1000";
 dt_Products.Rows.Add(dr);


 mainGrid.ItemsSource = dt_Products.DefaultView;
}

[결과]


위 이미지 처럼 의도한 바와 달리 다음과 같은 2가지 현상이 나타났습니다.

1. Fruit, Price 같은 열이 중복되어 출력
2. 두 번째 빈 열이 하나 더 출력

이 두 가지 현상은 다음 DataGrid Control에 각각의 옵션들로 해결 가능합니다.

1. Fruit, Price 같은 열이 중복되어 출력 
    => AutoGenerateColumns="False"

2. 두 번째 빈 열이 하나 더 출력           
    => CanUserAddRows="False"





3. 코드 수정

[.xaml]
<DataGrid x:Name="mainGrid" Grid.Row="0" Grid.Column="1"  Margin="5,5"
  CanUserAddRows="False" AutoGenerateColumns="False">
 <DataGrid.Columns>
  <DataGridTextColumn Header="Fruit" Binding="{Binding Path=Fruit}" Width="100"/>
  <DataGridTextColumn Header="Price" Binding="{Binding Path=Price}" Width="100"/>
 </DataGrid.Columns>
</DataGrid>

[결과]


CanUserAddRows 사용자가 새 행을 추가할 수 있는지 여부를 나타내는 값을 가져오거나 설정

 AutoGenerateColumns : 열이 자동으로 생성 되는지 여부를 나타내는 값을 가져오거나 설정




0 댓글