【问题标题】:How should I persist validation info from validation page to upload/import page?我应该如何将验证信息从验证页面保存到上传/导入页面?
【发布时间】:2015-04-28 11:44:17
【问题描述】:

我正在开发一个电子表格上传工具,用于创建/更新联系人,该工具将作为新选项添加​​到我的网站。

电子表格包含以下列:

  • 全名
  • 职位名称
  • 敬礼
  • 资质
  • 公司名称
  • 地址线1
  • 地址线2
  • 地址线3

数据库表结构如下:

Contact(contact_id INT PK IDENTITY(1,1), fullname VARCHAR(30), jobtitle VARCHAR(100), salutation VARCHAR(100), qualifications VARCHAR(100), companyname VARCHAR(100) , address1 VARCHAR(100), address2 VARCHAR(100), address3 VARCHAR(100))

规则是:

1. The Full name must contain at least one space (leading and/or trailing spaces will be trimmed).
2. Total length of the full name must not exceed 30 characters (including any space(s)).
3. 'Full Name' is the key field to identify an existing contact in the system. As such, raise a validation error if this field is
blank.
4. If a match is found on the 'Full Name', then the other fields of the contact will be updated with the values populated in the
spreadsheet.
5. If a match is not found on the key field, then create a new contact with the details.
6. When creating/updating a contact a value must be populated in at least one other column (in addition to the 'Full Name'), otherwise
raise a validation error.

过程:

有两个阶段,称为“验证阶段”和“实际上传”阶段。 - 上传电子表格时,必须按照上述规则验证电子表格并显示验证/状态消息(在屏幕上): 例如:

Row 1 is the header row so it will not be validated.
Row 2: Error - Full Name cannot be empty
Row 3: OK - A contact will be created
Row 4: OK - Contact will be updated
Row 5: Error - Full Name must contain at least one space
Row 6: Error - At least one other column must be populated in addition to the 'Full Name'

用户在这里有两个选择:

  1. 取消 - 然后将不再继续上传(因此用户可以选择根据验证消息更正行,然后重新上传)。
  2. 继续 - 然后上传将进入“实际上传”阶段,并且将创建或更新联系人(如果没有按照上述规则的验证错误)。 此外,验证/状态消息(类似于验证阶段的消息)应在成功上传后显示在屏幕上。

我已经设法解决了上面说明的所有问题,但我必须在“实际上传”阶段重新验证每一行(即我要进行两次相同的检查)。

我的问题是,有没有办法保留验证阶段的结果,这样我就不必在第二阶段重新验证每条记录?

我正在使用.NET Framework (Version 4.0.30319.34209) 上的 NativeExcel 库使用VB.NET/ASP.NET(和否VISUAL STUDIO)开发此功能。 请注意,所有代码都将使用VB.NET 编写在代码隐藏页面中(我这里别无选择,抱歉)。

任何建议/帮助将不胜感激。

【问题讨论】:

  • 您应该将此问题的标题编辑为问题。即使在文件中发现错误,用户是否应该能够继续上传?重新验证是否如此昂贵以至于值得避免?如果您只想存储“OK”行的列表,您可以创建一个 List(Of Int32) 并在验证阶段,将好的行号添加到列表中,然后使用它来确定要导入的行.您可以类似地使用列表的索引作为行号和列表中的验证消息将整个状态写入字符串列表。
  • @clweeks:感谢您的评论。是的,即使发现错误行,用户也可以继续上传,但是,错误行将不会在下一阶段导入。我想用状态消息维护所有行,但是当用户单击“上传”按钮时,它将是一个新页面/请求,因此在新页面请求之后,上一阶段创建的列表将不再存在。

标签: asp.net vb.net excel


【解决方案1】:

将验证状态消息保存为 List(Of String),然后将其设为会话变量,以便您可以在上传阶段将其用作提示。

【讨论】:

    【解决方案2】:

    读取 Excel 文件: 右键单击 References>COM>Office xx.x Object Application

            Microsoft.Office.Interop.Excel.Application exlApp = new     Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook exlWb = exlApp.Workbooks.Open(@"C:\Users\user\Excelfile.xls");
            Microsoft.Office.Interop.Excel.Worksheet exlWs = exlWb.Sheets["Sheet1"];
            int col = Convert.ToInt32(usedRange.Columns.Count);
            int row = Convert.ToInt32(usedRange.Rows.Count);
            exlApp.Visible = true;
            string[,] cellValue = new string[row + 1, col + 1];
            for (int j = 1; j <= row - 1; j++)
            {
                for (int k = 1; k <= col - 1; k++)
                {
                    cellValue[j, k] = exlWs.Cells[j, k + 1].ToString();
                }
             }
            exlWb.Close();
            exlWs = null;
            exlWb = null;
            exlApp.Quit();
            exlApp = null;
    

    【讨论】:

    • 感谢您的努力。我能够毫无问题地读取 excel 文件。
    猜你喜欢
    • 2014-02-17
    • 2015-11-04
    • 2011-05-08
    • 2020-11-22
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多