importar datos de excel a data grid view en WPF

FSO FSO Techno Systems 1 Reputation point
2022-05-13T05:02:48.443+00:00

disculpen soy estudiante de programacion y tengo un proyecto en WPF en el que uso un libro de excel como base de datos y nesecito cargar los datos del libro de excel a un data grid view y no encuentro la forma de acerlo me podrian ayudar por favor

Windows Presentation Foundation
Windows Presentation Foundation
A part of the .NET Framework that provides a unified programming model for building line-of-business desktop applications on Windows.
2,671 questions
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. Hui Liu-MSFT 38,251 Reputation points Microsoft Vendor
    2022-05-13T08:20:51.783+00:00

    Welcome to Microsoft Q&A, this is an English forum, it is recommended that you use English.
    Install EPPlus using NuGet.
    App.config:

     <configuration>  
         ...  
         <appSettings>  
             <!--The license context used-->  
             <add key="EPPlus:ExcelPackage.LicenseContext" value="NonCommercial" />  
         </appSettings>  
     </configuration>  
    

    MainWindow.xaml:

     <Window.Resources>  
            <local:DateTimeConverter x:Key="converter"/>  
            <local:DecimalConverter x:Key="decimalConverter"/>  
        </Window.Resources>  
        <Grid>  
            <DataGrid x:Name="dg" Width="700" Height="400" AutoGenerateColumns="False">  
                <DataGrid.Columns>  
                    <DataGridTextColumn Header="Party" Width="100" Binding="{Binding Party}"></DataGridTextColumn>  
                    <DataGridTextColumn Header="BillNo" Width="100" Binding="{Binding BillNo}"></DataGridTextColumn>  
                    <DataGridTextColumn Header="BillDate" Width="100" Binding="{Binding BillDt,Converter={ StaticResource converter}, StringFormat=yyyy - MM - dd }"></DataGridTextColumn>  
                    <DataGridTextColumn Header="Amount" Width="100" Binding="{Binding Amt , Converter={StaticResource decimalConverter},StringFormat=N2}"></DataGridTextColumn>  
                    <DataGridTextColumn Header="DueDate" Width="100" Binding="{Binding DueDt,Converter={ StaticResource converter}, StringFormat=yyyy - MM - dd }"></DataGridTextColumn>  
                    <DataGridTextColumn Header="PaidOn" Width="100" Binding="{Binding PaidOn,Converter={ StaticResource converter}, StringFormat=yyyy - MM - dd }"></DataGridTextColumn>  
                </DataGrid.Columns>  
            </DataGrid>  
        </Grid>  
    

    MainWindow.xaml.cs:

    using OfficeOpenXml;  
    using System;  
    using System.Collections.Generic;  
    using System.Data;  
    using System.Data.SqlClient;  
    using System.Globalization;  
    using System.IO;  
    using System.Linq;  
    using System.Windows;  
    using System.Windows.Data;  
    
    namespace SqlLiteDemo  
    {  
      public partial class MainWindow : Window  
      {  
        public MainWindow()  
        {  
          InitializeComponent();  
          CreateTable();  
        }  
        string xlFile = @"C:\Users\...\Desktop\testing.xlsx";  
        public void CreateTable()  
        {  
          SqlConnection m_dbConnection = new   SqlConnection(@"constr");  
          m_dbConnection.Open();  
          DataTable dt = new DataTable();  
          FileInfo existingFile = new FileInfo(xlFile);  
          ExcelPackage package = new ExcelPackage(existingFile);  
          dt = ExcelPackageToDataTable(package);  
          try  
          {  
            SqlDataAdapter Adapter = new SqlDataAdapter("SELECT * FROM [dbo].[ExcelData]", m_dbConnection);  
            SqlCommandBuilder cb = new SqlCommandBuilder(Adapter);  
            Adapter.UpdateCommand = cb.GetUpdateCommand();  
            Adapter.Update(dt);  
          }  
          catch  
          {  
            MessageBox.Show("data exist");  
          }  
          SqlCommand sqlCom = new SqlCommand("Select * From [dbo].[ExcelData]", m_dbConnection);  
          SqlDataAdapter sda = new SqlDataAdapter(sqlCom);  
          DataSet ds = new DataSet();  
          sda.Fill(ds);  
          if (ds.Tables[0].Rows.Count > 0)  
          {  
            dg.ItemsSource = ds.Tables[0].DefaultView;  
          }  
          m_dbConnection.Close();  
        }  
        public static DataTable ExcelPackageToDataTable(ExcelPackage excelPackage)  
        {  
          DataTable dt = new DataTable();  
          ExcelWorksheet worksheet = excelPackage.Workbook.Worksheets.First();  
          if (worksheet.Dimension == null)  
          {  
            return dt;  
          }  
          List<string> columnNames = new List<string>();  
    
          int currentColumn = 1;  
          foreach (var cell in worksheet.Cells[1, 1, 1, worksheet.Dimension.End.Column])  
          {  
            string columnName = cell.Text.Trim();  
    
            if (cell.Start.Column != currentColumn)  
            {  
              columnNames.Add("Header_" + currentColumn);  
              dt.Columns.Add("Header_" + currentColumn);  
              currentColumn++;  
            }  
            columnNames.Add(columnName);  
            int occurrences = columnNames.Count(x => x.Equals(columnName));  
            if (occurrences > 1)  
            {  
              columnName = columnName + "_" + occurrences;  
            }  
            dt.Columns.Add(columnName);  
            currentColumn++;  
          }  
          for (int i = 2; i <= worksheet.Dimension.End.Row; i++)  
          {  
            var row = worksheet.Cells[i, 1, i, worksheet.Dimension.End.Column];  
            DataRow newRow = dt.NewRow();  
            foreach (var cell in row)  
            {  
              newRow[cell.Start.Column - 1] = cell.Text;  
            }  
            dt.Rows.Add(newRow);  
          }  
          return dt;  
        }  
      }  
      [ValueConversion(typeof(DateTime), typeof(String))]  
      public class DateTimeConverter : IValueConverter  
      {  
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)  
        {  
          return DateTime.ParseExact(value.ToString(), "d-M-yyyy", CultureInfo.InvariantCulture);  
        }  
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)  
        {  
          throw new NotImplementedException();  
        }  
      }  
      [ValueConversion(typeof(double), typeof(String))]  
      public class DecimalConverter : IValueConverter  
      {  
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)  
        {  
          return double.Parse(value.ToString(), CultureInfo.InvariantCulture);  
        }  
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)  
        {  
          throw new NotImplementedException();  
        }  
      }  
    }  
    

    The result:
    201639-image.png
    201702-image.png


    If the response is helpful, please click "Accept Answer" and upvote it.
     Note: Please follow the steps in our [documentation][5] to enable e-mail notifications if you want to receive the related email notification for this thread. 

    [5]: https://learn.microsoft.com/en-us/answers/articles/67444/email-notifications.html