c# - 如何从 Gridview 导出到 Excel

标签 c# mysql asp.net

我有一个按钮可以将我的 Gridview1 数据导出到 Excel,但是当我尝试下面的代码(我在 C# 中使用)时,它给了我一个编译错误。你能帮我吗..

错误 1:无法将 [] 索引应用于“System.Web.UI.WebControls.GridView”类型的表达式

错误 2:当前上下文中不存在名称“MessageBox”

try
        {
            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
            excel.Visible = true;
            Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Add(System.Reflection.Missing.Value);
            Microsoft.Office.Interop.Excel.Worksheet sheet1 = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Sheets[1];
            int StartCol = 1;
            int StartRow = 1;
            int j = 0, i = 0;

            //Write Headers
            for (j = 0; j < GridView1.Columns.Count; j++)
            {
                Microsoft.Office.Interop.Excel.Range myRange = (Microsoft.Office.Interop.Excel.Range)sheet1.Cells[StartRow, StartCol + j];
                myRange.Value2 = GridView1.Columns[j].HeaderText;
            }

            StartRow++;

            //Write datagridview content
            for (i = 0; i < GridView1.Rows.Count; i++)
            {
                for (j = 0; j < GridView1.Columns.Count; j++)
                {
                    try
                    {
                        Microsoft.Office.Interop.Excel.Range myRange = (Microsoft.Office.Interop.Excel.Range)sheet1.Cells[StartRow + i, StartCol + j];
                        myRange.Value2 = GridView1[j, i].Value == null ? "" : GridView1[j, i].Value;
                    }
                    catch
                    {
                        ;
                    }
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

最佳答案

首先,全面披露:我不是 ASP.NET WebForms 方面的专家,所以我只是在语法基础上阅读本文(不检查您的实际框架使用是否正确)。

错误1

在我看来,错误发生在这里:

myRange.Value2 = GridView1[j, i].Value == null ? "" : GridView1[j, i].Value;

看起来您正在尝试在使用变量 ij 的循环内使用数组表示法引用 GridView1。但是,看看你的循环:

for (i = 0; i < GridView1.Rows.Count; i++)

for (j = 0; j < GridView1.Columns.Count; j++)

您的循环正在通过集合访问 GridView1,特别是分别访问 .Rows.Columns。所以我的假设是你可能需要类似的东西:

myRange.Value2 = GridView1.Rows[i].Columns[j].Value == null ? "" : GridView1.Rows[i].Columns[j].Value;

请记住,这只是基于您之前的代码 (GridView1.Columns[j].HeaderText) 的语法猜测。

错误2

这里的问题是,您正在使用的名称(静态类或变量)MessageBox 在代码中此时似乎不存在。所以我想问:

  1. 变量是否在作用域内?即,它是否在 try block 中较早声明,并且现在已超出 catch 的范围?

  2. 如果是静态类,程序集引用是否正确? Intellisense 应该在 Visual Studio 中为您选择此选项,并使用重构选项将引用包含为上面的 using 语句,或者为您完全限定名称。

根据内存 MessageBoxWPF 程序集中与 Windows 窗体有关的静态类,作为 ASP.NET 的一部分- 它用于在桌面程序中显示窗口。如果您希望在浏览器中显示一条消息,则可以使用如下 javascript 语句:

alert("Your exception message here");

但是,您将需要一些方法来捕获该异常 (ex),从中获取文本 (ex.ToString()) 并将其传输到页面中通过 JavaScript 显示。

最后的想法:如果您想要显示该错误,并且这是由于单击页面上的按钮而导致的,您可能打算调用“导出到 Excel”函数作为AJAX 调用服务器。如果是这种情况,请尝试将 HTTP 错误代码(例如 500 等)返回给浏览器,并使用 .fail() 绑定(bind)器显示相应的客户端错误。只是一个建议:)

关于c# - 如何从 Gridview 导出到 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37874693/

相关文章:

asp.net - 你如何做一个Web.Config "Constant?"

c# - 如何在同一URL下托管多个.NET Core应用

c# - 使用 lambda 表达式代替 IComparer 参数

C# Async Await 从不返回主线程

sql - MySQL InnoDB 只锁定受影响的行?

sql - 当另一个表中的特定行已被删除时,从表中删除行

mysql - 如何选择重复的行(与不同的行相反)?

c# - ASP.NET Core Singleton 实例与 Transient 实例性能

c# - 与 ObjectContext 相比,为什么在 EF 4.1 中插入实体这么慢?

c# - 使用 C# 从字符串中提取数字