이번 포스팅에서는 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 댓글