我有一个将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;
似乎您正在尝试在使用变量
GridView1
和i
的循环内使用数组符号引用j
。但是,请看一下您的循环: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
块中早先声明的,但现在已经超出了catch
的范围吗?如果它是静态类,则是否正确引用了该程序集? Intellisense应该在Visual Studio中为您提供帮助,并提供重构选项以将引用包含为上面的
using
语句,或者完全限定您的名称。内存
MessageBox
是WPF
程序集中某个与Windows窗体有关的静态类,而不是作为ASP.NET的一部分-它用于在桌面程序中显示窗口。如果您希望在浏览器中显示一条消息,那将是一个JavaScript语句,例如:alert("Your exception message here");
但是,您将需要一些方法来捕获该异常(
ex
),从中获取文本(ex.ToString()
)并将其传输到要通过javascript显示的页面中。最后考虑:如果要显示该错误,并且是由于在页面上单击了按钮而导致的,则您可能打算将Export to Excel函数作为对服务器的AJAX调用来调用。如果是这种情况,请尝试将HTTP错误代码(例如500或类似的东西)返回给浏览器,并使用
.fail()
活页夹显示适当的客户端错误。只是一个建议:)关于c# - 如何从Gridview导出到Excel,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37874693/