C# 使用GridView删除列以导出到Excel

C# 使用GridView删除列以导出到Excel,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我正在将gridView绑定到列表。我可以将其导出到excel文件,但无法删除特定列。有什么办法吗?我尝试了gridView.Columns.RemoveAt(myIndex),但没有成功,并引发了一个null异常,我假设这是因为gridView未绑定到dataTable var models = new ModelService().List(startDate, DateTime.Now); var gridView = new GridView { DataSource = models

我正在将gridView绑定到
列表
。我可以将其导出到excel文件,但无法删除特定列。有什么办法吗?我尝试了
gridView.Columns.RemoveAt(myIndex)
,但没有成功,并引发了一个null异常,我假设这是因为gridView未绑定到dataTable

var models = new ModelService().List(startDate, DateTime.Now);
var gridView = new GridView { DataSource = models };                       

gridView.DataBind();

转换为数据集或数据表

foreach (GridViewRow dr in gridView.Rows)
{
  //Create dataset and insert into cell value.
  dr.Cells[0].Text;
  dr.Cells[1].Text;
}
删除所需的行

for (int j = ds.Tables[0].Rows.Count - 1; j >= 0; j--)
{
  if (ds.Tables[0].Rows[j][column].ToString() == criteria)
  {
    ds.Tables[0].Rows.RemoveAt(j);
  }
}
然后导出数据集

两个建议:

  • 使用LINQ仅从ModelService中选择所需的列,以便不需要的列永远不会进入网格
  • 在GridView中定义列,并隐藏导出到Excel时不需要的列。我之所以这样做,是因为我想对列的格式有更多的控制

  • 模型对象几乎是静态的。模型对象可能具有我不希望在gridView中显示的address属性。我该如何定义gridView中的列呢?谢谢,虽然我希望有一种比数据传输对象更好的方法,但它还是有效的。