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)
'젬스it' 카테고리의 다른 글
wpf 에서 excelDataReader.dll 을 이용해서 엑셀파일을 업로드해서 데이터를 db에 넣기 (0) | 2025.03.07 |
---|---|
wpf. oledb,npoi, epplus 를 사용하지 않고, Microsoft Excel Interop 라이브러리를 사용 엑셀파일 업로드 (0) | 2025.03.06 |
wpf에서 oledb를 이용해서 엑셀파일을 업로드해서 해당 내용을 db에 넣는 방법은? (0) | 2025.03.05 |
wpf 에서 window 클래스의 Dialogresult 와 같은 속성은? (0) | 2025.03.05 |
NuGet (.nupkg) 패키지 설치하는 방법 (0) | 2025.03.04 |