본문 바로가기
C#

c# WPF Datagrid csv 파일로 저장하기

by orange+ 2024. 7. 4.

안녕하세요.

오늘은 C#에서 Datagrid의 내용을 엑셀에서도 볼 수 있는 csv 파일로 저장하는 방법에 대해

알아 보겠습니다. (마우스 우측 버튼 클릭 메뉴에 Datagrid를 csv 파일로 저장하는 기능 구현)

 

특별히 어려운 내용은 없구요. 보시면 직관적으로 이해하실 수 있으실 겁니다.

자, 그럼 시작해 볼까요?

 

1. 먼저 마우스 우측 버튼 클릭 시 csv 파일 저장 메뉴를 구현하기 위해서는 xaml 파일 내 Datagrid 표현 부분에 아래와

같이 작성하시면 됩니다.

 

           <DataGrid x:Name="Datagrid명" 
                    ......
                    >
                <DataGrid.ContextMenu>
                    <ContextMenu Name="cm" >
                        <MenuItem Name="miSaveascsv" Header="SaveAs *.csv" Style="

                                        {DynamicResource Cmi1}" Click="miSaveascsv_Click"/>
                    </ContextMenu>
                </DataGrid.ContextMenu>

 

2. 다음은 Datagrid 에서 마우스 우측 버튼을 클릭하여 Datagrid의 내용을 csv 파일로 저장하는 내용입니다.

 

먼저 공통 함수 클래스에 아래 함수를 정의합니다.

public bool SaveToCSV(System.Windows.Controls.DataGrid dataGrid, string Filename)
        {
            bool IsVaild = false;
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.Title = "Save CSV Files";
            saveFileDialog.Filter = "CSV file (*.csv)|*.csv";
            saveFileDialog.FileName = Filename;
            string gridname = Filename;

            Nullable<bool> result = saveFileDialog.ShowDialog();

            // Process save file dialog box results
            if (result == true)
            {
                string path = System.IO.Path.GetFullPath(saveFileDialog.FileName);
                createcsvfile(dataGrid, path);
                IsVaild = true;
            }
            return IsVaild;
        }

private void createcsvfile(System.Windows.Controls.DataGrid dataGrid, string FilePath)
        {
            dataGrid.SelectionMode = DataGridSelectionMode.Extended;
            dataGrid.SelectAllCells();

            dataGrid.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
            ApplicationCommands.Copy.Execute(null, dataGrid);

            dataGrid.UnselectAllCells();
            dataGrid.SelectionMode = DataGridSelectionMode.Single;

            String result = (string)System.Windows.Clipboard.GetData(System.Windows.DataFormats.CommaSeparatedValue);
            File.AppendAllText(FilePath, result, UnicodeEncoding.UTF8);
        }

 

그리고 Datagrid 마우스 우측 버튼 클릭 이벤트를 아래와 같이 작성합니다.

 

private void miSaveascsv_Click(object sender, RoutedEventArgs e)
        {
            DateTime dt = DateTime.Now;
            String _sysdate = dt.ToString("yyyyMMddHHmmss");  

            CommonFunction func = new CommonFunction();

            string ExportName = "csv_file_" + _sysdate;
           
            bool result = func.SaveToCSV(Datagrid명, ExportName);
            if (result == true)
            {                
                MessageBox.Show("csv 파일로 저장되었습니다.", "확인");
            }
        }

 

어때요? 간단하죠?

하지만 C#을 처음 접하시는 초보자분들에겐 쉽지 않은 내용일 수도 있습니다.

 

그럼, 짧은 내용이었지만  많은 분들에게 도움이 되었길 기원하며 이만 물러가겠습니다.

감사합니다. ^^+

 

 

 

 

그런데 혹시 가슴이 답답해 명상이나 힐링이 필요하시다면? 들러 주세요~ ^^

 

https://youtu.be/oRHsThgQdzk?feature=shared

 

댓글