White Whale Studio

[WPF] DataGrid 의 Combobox 컬럼 사용과 선택한 Cell 정보 읽기 본문

IT Engineering/.Net (WPF)

[WPF] DataGrid 의 Combobox 컬럼 사용과 선택한 Cell 정보 읽기

glorymind 2013. 9. 24. 11:52
반응형

C#을 주로 만질때에도 많이 사용했던 것이 DataGridView 인데요.

 

WPF에서는 DataGrid로 표기되어 사용됩니다.

데이터베이스로부터 정보를 가져와서 읽고 수정하고 삭제하는 작업을 하는데 주로 사용하는데

 

Datagrid에 뿌려진 정보를 수정할때 좀더 세련되고 간편한 방식으로 정보를 갱신하고자 할 때

사용하면 좋을 것 같습니다.

사실 DataGrid의 컬럼(열)에 콤보박스나 체크박스 이미지 등등 여러가지를 표현하는 방법이 있는데

이번에는 Combobox에 대해서 포스팅을 하려고 합니다.

항상 저는 웹사이트 참고 후 다시 제가 스스로 찾아볼때 알아보기 쉬우라고 포스팅을 하는 목적이라..

 

각설하구요.. 

 

우선 XAML 쪽입니다.

소스에서 다음과 같이 참조추가를 해주셔야됩니다. 저는 my라는 이름으로 툴킷을 추가했습니다.

xmlns:my ="툴킷주소"

xmlns:staticData="clr-namespace:프로젝트명"

 

toolkit 같은 경우는 참조에서 따로 추가를 해주셔야됩니다.

참조 - 참조추가 - .Net - WPF ToolKit을 찾아서 추가해주시면됩니다.

 

그리고

<Window.Resources>

<staticData:StatusList x:Key="StatusList"/>

</Window.Resources>

를 추가해줍니다.

 

여기서 StatusList 는 class로 추가해주셔야합니다. 이 리스트는 콤보박스에 들어갈 아이템들을 정의합니다.

 

public class StatusList : List<string>
    {
        public StatusList()
        {
            this.Add("0");
            this.Add("1");
            this.Add("2");
            this.Add("3");
            this.Add("4");
        }
    }

 

위와같이 정의를 해주시면 되고

다음으로는 데이터그리드를 정의해야할 차례입니다. 참고한 소스를 찬찬히 살펴보죠.

 

<my:DataGrid x:Name="dgData" AutoGenerateColumns="False">
            <my:DataGrid.Columns>
                <my:DataGridTextColumn Binding="{Binding Subject}" Header="Subject" Width="*"/>
                <my:DataGridTemplateColumn Header="Status" Width="100">
                    <my:DataGridTemplateColumn.CellTemplate> <!-- 단순 출력되는 부분입니다. 한번 더 클릭하면 콤보박스가 나타납니다.-->
                        <DataTemplate>
                            <TextBlock Text="{Binding Status}"/> <!--바인딩같은 경우는 컬럼을 의미합니다. DB에서 가져오는 경우 <TextBlock Text="{Binding Path=컬럼명}"  과 같이 되겠지요. -->
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellTemplate>
                   
                    <my:DataGridTemplateColumn.CellEditingTemplate> <!--핵심인 콤보박스 부분입니다. 이 곳에서 미리 정의한 StatusList를 불러와서 바인딩시킵니다.-->
                        <DataTemplate>
                            <ComboBox Height="22"
                                      ItemsSource="{StaticResource StatusList}"
                                      SelectedItem="{Binding Status}"/>
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellEditingTemplate>
                   
                </my:DataGridTemplateColumn>
                <my:DataGridTextColumn Binding="{Binding RaisedBy}" Header="Raised By" Width="100"/>
            </my:DataGrid.Columns>
        </my:DataGrid>

 

 

이렇게 하시면 콤보박스가 추가된 그리드뷰를 확인하실수 있습니다.

 

아, 그리고 한가지 더

DataGrid에서 선택한 셀의 정보를 읽는 방법입니다.

아주 간단한 방법인데... 조금 헤매다 찾았습니다.

 

우선 DataGrid를 더블클릭해서

private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)

{

 

}

와 같이 자동생성을 하시구요.

함수내에

 

DataRowView myRow = (DataRowView)dataGrid.CurrentCell.Item; // 선택된 행 정보를 불러옵니다.
label2.Content = myRow.Row.ItemArray[5].ToString(); // 해당 행 정보에서 [i]번째 컬럼에 해당하는 셀의 정보를 불러옵니다. 필요에 따라 수정해주시면되겠죠.

 

와 같이 내용을 넣어주시면 됩니다.

 

혹시나 DataRowView의 갱신이 필요할때는 null을 넣어주시고

Nullexception을 한번 체크하여 코딩하시면 될것같네요.

 

이와 같이 설정하신뒤 데이터베이스를 읽고 수정하는 것이 가능합니다.

 

반응형
Comments