wpf에서 csv파일 업로드시 UserControl 안에. UserControl 을 넣어서 코딩하는 예제

2025. 3. 6. 10:06젬스it

반응형

기존 `UserControl` 안에 다른 `UserControl`을 포함하여 엑셀 파일을 업로드하고 데이터를 데이터베이스에 삽입하는 방법

먼저, 내부에 포함될 `UploadControl`을 작성하고, 외부에 상위 컨트롤을 작성하여 포함시킴

1. **내부 UserControl (UploadControl)**:
   - `UploadControl.xaml` 파일:
   ```xml
   <UserControl x:Class="CSVUploader.UploadControl"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                Height="100" Width="300">
       <Border BorderBrush="Black" BorderThickness="1" Padding="10" Margin="10">
           <Grid>
               <Button Content="CSV 파일 업로드" HorizontalAlignment="Center" VerticalAlignment="Center" Click="UploadButton_Click"/>
           </Grid>
       </Border>
   </UserControl>
   ```

   - `UploadControl.xaml.cs` 파일:
   ```csharp
   using System;
   using System.Data;
   using System.Data.SqlClient;
   using System.IO;
   using System.Windows;
   using System.Windows.Controls;
   using Microsoft.Win32;

   namespace CSVUploader
   {
       public partial class UploadControl : UserControl
       {
           public UploadControl()
           {
               InitializeComponent();
           }

           private void UploadButton_Click(object sender, RoutedEventArgs e)
           {
               OpenFileDialog openFileDialog = new OpenFileDialog();
               openFileDialog.Filter = "CSV Files|*.csv";
               if (openFileDialog.ShowDialog() == true)
               {
                   string filePath = openFileDialog.FileName;
                   UploadCSVFile(filePath);
               }
           }

           private void UploadCSVFile(string filePath)
           {
               DataTable dt = new DataTable();

               using (StreamReader sr = new StreamReader(filePath))
               {
                   string[] headers = sr.ReadLine().Split(',');
                   foreach (string header in headers)
                   {
                       dt.Columns.Add(header);
                   }

                   while (!sr.EndOfStream)
                   {
                       string[] rows = sr.ReadLine().Split(',');
                       DataRow dr = dt.NewRow();
                       for (int i = 0; i < headers.Length; i++)
                       {
                           dr[i] = rows[i];
                       }
                       dt.Rows.Add(dr);
                   }
               }

               string dbConnectionString = "Your database connection string";

               using (SqlConnection sqlConn = new SqlConnection(dbConnectionString))
               {
                   sqlConn.Open();
                   foreach (DataRow row in dt.Rows)
                   {
                       SqlCommand sqlCmd = new SqlCommand("INSERT INTO YourTableName (Column1, Column2) VALUES (@Column1, @Column2)", sqlConn);
                       sqlCmd.Parameters.AddWithValue("@Column1", row["Column1"]);
                       sqlCmd.Parameters.AddWithValue("@Column2", row["Column2"]);
                       sqlCmd.ExecuteNonQuery();
                   }
               }

               MessageBox.Show("CSV 파일이 성공적으로 업로드되었습니다.", "업로드 완료", MessageBoxButton.OK, MessageBoxImage.Information);
           }
       }
   }
   ```

2. **외부 UserControl (MainControl)**:
   - `MainControl.xaml` 파일:
   ```xml
   <UserControl x:Class="CSVUploader.MainControl"
                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:CSVUploader"
                Height="400" Width="600">
       <Grid>
           <local:UploadControl />
       </Grid>
   </UserControl>
   ```

   - `MainControl.xaml.cs` 파일:
   ```csharp
   using System.Windows.Controls;

   namespace CSVUploader
   {
       public partial class MainControl : UserControl
       {
           public MainControl()
           {
               InitializeComponent();
           }
       }
   }
   ```

3. **MainWindow 구성**:
   - `MainWindow.xaml` 파일:
   ```xml
   <Window x:Class="CSVUploader.MainWindow"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:local="clr-namespace:CSVUploader"
           Title="CSV Uploader" Height="450" Width="800">
       <Grid>
           <local:MainControl />
       </Grid>
   </Window>
   ```

이 예제는 `MainControl`이라는 상위 `UserControl` 안에 `UploadControl`이라는 하위 `UserControl`을 포함시키는 예제입니다. 상위 컨트롤에서 하위 컨트롤을 참조하여 사용합니다.

추가로 궁금한 사항이 있으면 언제든지 말씀해 주세요! 😊 [A](https://github.com/shendongnian/download4/tree/e45352911534dfb757cba4d0074eec312760536f/first_version_download2%2F382446-33000667-101308608-2.cs?copilot_analytics_metadata=eyJldmVudEluZm9fbWVzc2FnZUlkIjoiSHNxMlZ6VVNnQ1R0blBDc0VNeTZNIiwiZXZlbnRJbmZvX2NsaWNrU291cmNlIjoiY2l0YXRpb25MaW5rIiwiZXZlbnRJbmZvX2NvbnZlcnNhdGlvbklkIjoiNVprZTZ3QXA0VmV0dkJkUjlDaW12IiwiZXZlbnRJbmZvX2NsaWNrRGVzdGluYXRpb24iOiJodHRwczpcL1wvZ2l0aHViLmNvbVwvc2hlbmRvbmduaWFuXC9kb3dubG9hZDRcL3RyZWVcL2U0NTM1MjkxMTUzNGRmYjc1N2NiYTRkMDA3NGVlYzMxMjc2MDUzNmZcL2ZpcnN0X3ZlcnNpb25fZG93bmxvYWQyJTJGMzgyNDQ2LTMzMDAwNjY3LTEwMTMwODYwOC0yLmNzIn0%3D&citationMarker=9F742443-6C92-4C44-BF58-8F5A7C53B6F1)

반응형