我有一个按钮可以将我的 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;
看起来您正在尝试在使用变量 i
和 j
的循环内使用数组表示法引用 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
在代码中此时似乎不存在。所以我想问:
变量是否在作用域内?即,它是否在
try
block 中较早声明,并且现在已超出catch
的范围?如果是静态类,程序集引用是否正确? Intellisense 应该在 Visual Studio 中为您选择此选项,并使用重构选项将引用包含为上面的
using
语句,或者为您完全限定名称。
根据内存 MessageBox
是 WPF
程序集中与 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/