如何将包含自定义控件GridView导出到Excel2011-10-25 博客园 m2land今天有人问我,如果Girdview模板列里使用了自定义控件,那导出的时候如何处理?比如该自定义控件包含一个Dropdownlist和三个Label控件,其中用来在页面上显示数据的是其中一个 Label控件,现在的问题是,如果不在PrepareControlForExport()中对该自定义控件进行处理,那么导 出的Excel文件的对应Gridview中使用了自定义控件的列的内容全部相同(为Dropdownlist控件的第一个 Item),但是对该自定义控件进行处理的话,不知道该如何才能正确的取出它的值(用来显示的label中的 值),试图无法把自定义控件转换成Dropdowlist和Label中的任何一种,但强制转换的话运行到该语句会 报错。我们首先来看看在GridView导出到Excel和开源图表工具提到的导出工具中的开发,源文件可以在这里 下载:Export GridView to Excel在GridViewExportUtil.cs中,函数PrepareControlForExport是这样的:
/// <summary>  /// Replace any of the contained controls with literals  /// </summary>  /// <param name="control"></param>  private static void PrepareControlForExport(Control control)  {    for (int i = 0; i < control.Controls.Count; i++)    {      Control current = control.Controls[i];      if (current is LinkButton)      {        control.Controls.Remove(current);        control.Controls.AddAt(i, new LiteralControl((current as LinkButton).Text));      }      else if (current is ImageButton)      {        control.Controls.Remove(current);        control.Controls.AddAt(i, new LiteralControl((current as ImageButton).AlternateText));      }      else if (current is HyperLink)      {        control.Controls.Remove(current);        control.Controls.AddAt(i, new LiteralControl((current as HyperLink).Text));      }      else if (current is DropDownList)      {        control.Controls.Remove(current);        control.Controls.AddAt(i, new LiteralControl((current as DropDownList).SelectedItem.Text));      }      else if (current is CheckBox)      {        control.Controls.Remove(current);        control.Controls.AddAt(i, new LiteralControl((current as CheckBox).Checked ? "True" : "False"));      }      if (current.HasControls())      {        GridViewExportUtil.PrepareControlForExport(current);      }    }  }