首页 > 解决方案 > 从 Excel 获取数据仅显示最后一行

问题描述

我在ASPxGridView从 Excel 文件中获取数据时遇到了一些问题。它只显示 Excel 中的最后一个数据。我尝试创建custom unbound但没有运气。试图使它成为List<>并试一试,没有成功。到目前为止,这是我的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
using DevExpress.Spreadsheet;
using DevExpress.Spreadsheet.Export;
using System.Data;

        string FilePath
        {
            get { return Session["FilePath"] == null ? String.Empty : Session["FilePath"].ToString(); }
            set { Session["FilePath"] = value; }
        }

        private DataTable GetTableFromExcel()
        {
            Workbook book = new Workbook();
            book.InvalidFormatException += book_InvalidFormatException;
            book.LoadDocument(FilePath);
            Worksheet sheet = book.Worksheets.ActiveWorksheet;
            Range range = sheet.GetUsedRange();
            DataTable table = sheet.CreateDataTable(range, false);
            DataTableExporter exporter = sheet.CreateDataTableExporter(range, table, false);
            exporter.CellValueConversionError += exporter_CellValueConversionError;
            exporter.Export();
            return table;
        }

        void book_InvalidFormatException(object sender, SpreadsheetInvalidFormatExceptionEventArgs e)
        {

        }

        void exporter_CellValueConversionError(object sender, CellValueConversionErrorEventArgs e)
        {
            e.Action = DataTableExporterAction.Continue;
            e.DataTableValue = null;
        }

        protected void Upload_FileUploadComplete(object sender, DevExpress.Web.FileUploadCompleteEventArgs e)
        {
            FilePath = Page.MapPath("~/XlsTables/") + e.UploadedFile.FileName;
            e.UploadedFile.SaveAs(FilePath);
        }

        public class invoice
        {
            public string nomor_invoice { get; set; }
        }  

        protected void Grid_CustomCallback(object sender, DevExpress.Web.ASPxGridViewCustomCallbackEventArgs e)
        {
            if (!String.IsNullOrEmpty(FilePath))
            {
                DataTable table = GetTableFromExcel(); // Get The Excel
                List<object> inv = new List<object>();
                List<object> dekl = new List<object>();

                List<invoice> invoiceList = new List<invoice>();
                for (int i = 1; i < table.Rows.Count; i++)
                {
                    DataRow row = table.Rows[i];

                    invoice nomorInvo = new invoice();

                    nomorInvo.nomor_invoice = row[1].ToString();
                    invoiceList.Add(nomorInvo);

                    string noDkl = row[0].ToString().ToUpper().Trim();
                    string[] nomor = noDkl.Split('-');
                    Decimal cab = decimal.Parse(nomor[0].ToString());
                    Decimal pmsrn = decimal.Parse(nomor[1].ToString());
                    Decimal reg = decimal.Parse(nomor[2].ToString());
                    string dkl = nomor[3].ToString();
                    Decimal cob = decimal.Parse(nomor[4].ToString());
                    Decimal bln = decimal.Parse(nomor[5].ToString());
                    Decimal thn = decimal.Parse(nomor[6].ToString());

                    string invo_no = row[1].ToString().Trim();

                    inv.Add(invo_no); // add to the list
                    inv.ToList();

                    SSREAS.DL.AE.Upload.dsImportir.APFDPE17Row invc = new DL.AE.Upload.dsImportirTableAdapters.APFDPE17TableAdapter().GetDataByDkinvc(cab, pmsrn, reg, dkl, cob, bln, thn, invo_no).SingleOrDefault(); 
                    // This is my select query. I used dataSet 

                    if (invc != null)
                    {
                        for (int z = 0; z < inv.Count; z++)
                        {
                            odsGrid.SelectParameters["DKKDCB"].DefaultValue = cab.ToString();
                            odsGrid.SelectParameters["DKKDPS"].DefaultValue = pmsrn.ToString();
                            odsGrid.SelectParameters["DKRGDK"].DefaultValue = reg.ToString();
                            odsGrid.SelectParameters["DKDKL"].DefaultValue = dkl;
                            odsGrid.SelectParameters["DKCOB"].DefaultValue = cob.ToString();
                            odsGrid.SelectParameters["DKBLN"].DefaultValue = bln.ToString();
                            odsGrid.SelectParameters["DKTHN"].DefaultValue = thn.ToString();
                            odsGrid.SelectParameters["DKINVC"].DefaultValue = invo_no;
                            Grid.DataBind();
                        }
                    }
                    else if (invc == null)
                    {
                        return;
                    }
                    Grid.DataBind();
                }
            }
        }

我设置了断点并发生了 0 个错误,但是当我上传 Excel 文件时,它只显示 1 个数据而不是 2 个数据,并且它是 excel 的最后一行。我的代码有什么问题?帮助将不胜感激。谢谢!

excel文件

标签: c#asp.netvisual-studio-2013devexpress

解决方案


在 page_prerender() 事件中持久化缓存或会话中的表绑定它将起作用的数据。


推荐阅读