手把手教你如何扩展GridView之自带Excel和Word导出

private   void  DisableControls(Control gv)
        
{
            LinkButton lb 
= new LinkButton();
            Literal l 
= new Literal();
            
string name = String.Empty;
            
for (int i = 0; i < gv.Controls.Count; i++)
            
{
                
if (gv.Controls[i].GetType() == typeof(LinkButton))
                
{
                    l.Text 
= (gv.Controls[i] as LinkButton).Text;
                    gv.Controls.Remove(gv.Controls[i]);
                    gv.Controls.AddAt(i, l);
                }

                
else if (gv.Controls[i].GetType() == typeof(DropDownList))
                
{
                    l.Text 
= (gv.Controls[i] as DropDownList).SelectedItem.Text;
                    gv.Controls.Remove(gv.Controls[i]);
                    gv.Controls.AddAt(i, l);
                }

                
if (gv.Controls[i].HasControls())
                
{
                    DisableControls(gv.Controls[i]);
                }

            }

        }


在web应用程序中,我们是不是很发愁打印问题,您是不是有过为了打印写Activex的经历,我们有没有想过,Word和Excel的打印功能能被我们利用起来呢?只要我们将我们将数据导出到Excel或者Word中,打印岂不是小case了么。下面就谈谈如何让GridView自己支持导出Excel和Word 。
    首先增加了两个属性,用于指示是否支持Excel导出和Word导出

CODE:
 
// 增加了一个设置是否显示“导出Word”按钮的属性
         /**/ /// <summary>
        
/// 排序提示信息
        
/// </summary>

        [
        Description(
" 显示导出到Word " ),
        Category(
" 扩展 " ),
        DefaultValue(
true )
        ]
        
public   virtual   bool  ShowExportWord
        
{
            
get
            
{
                
object obj2 = this.ViewState["ShowExportWord"];
                
if (obj2 != null)
                
{
                    
return (bool)obj2;
                }

                
return true;
            }

            
set
            
{
                
bool aShowExportWord = this.ShowExportWord;
                
if (value != aShowExportWord)
                
{
                    
this.ViewState["ShowExportWord"= value;
                    
if (base.Initialized)
                    
{
                        
base.RequiresDataBinding = true;
                    }

                }

            }

        }

        
// 增加了一个设置是否显示“导出Excel”按钮的属性
        [
      Description(
" 显示导出到Excel " ),
      Category(
" 扩展 " ),
      DefaultValue(
true )
      ]
        
public   virtual   bool  ShowExportExcel
        
{
            
get
            
{
                
object obj2 = this.ViewState["ShowExportExcel"];
                
if (obj2 != null)
                
{
                    
return (bool)obj2;
                }

                
return true;
            }

            
set
            
{
                
bool aShowExportExcel = this.ShowExportExcel;
                
if (value != aShowExportExcel)
                
{
                    
this.ViewState["ShowExportExcel"= value;
                    
if (base.Initialized)
                    
{
                        
base.RequiresDataBinding = true;
                    }

                }

            }

        }



声明两个LinkButton控件btnExportWord,btnExport,分别用于点击导出Excel和点击导出word,并在控件的OnInit事件中初始化两个控件
声明两个LinkButton,并在控件的OnInit中初始化

CODE:

 
LinkButton btnExportWord;
        LinkButton btnExport; 
protected   override   void  OnInit(EventArgs e)
        
{
            
this.EnableViewState = true;

            btnExport 
= new LinkButton();
            btnExport.CommandName 
= "ExportToExcel";
            btnExport.EnableViewState 
= true;
            btnExport.Text 
= "导出Excel";
            btnExportWord 
= new LinkButton();
            btnExportWord.CommandName 
= "ExportToWord";
            btnExportWord.EnableViewState 
= true;
            btnExportWord.Text 
= "导出Word";
base.OnInit(e);
        }



将两个LinkButton添加到GridView子控件中。

CODE:

protected   override   int  CreateChildControls(System.Collections.IEnumerable dataSource,  bool  dataBinding)  {
            
int res = base.CreateChildControls(dataSource, dataBinding);
                
try
                
{
                    GridViewRow row 
= new GridViewRow(00, DataControlRowType.Pager, DataControlRowState.Normal);  TableCell cell2 = new TableCell();
                    cell2.HorizontalAlign 
= HorizontalAlign.Right;
                    cell2.Wrap 
= falseif (this.ShowExportExcel == true)
                    
{
                        l1 
= new Literal();
                        l1.Text 
= " [";
                        cell2.Controls.Add(l1);
                        cell2.Controls.Add(btnExport);
                        l1 
= new Literal();
                        l1.Text 
= "";
                        cell2.Controls.Add(l1);
                    }

                    
if (this.ShowExportWord == true)
                    
{
                        l1 
= new Literal();
                        l1.Text 
= " [";
                        cell2.Controls.Add(l1);
                        cell2.Controls.Add(btnExportWord);
                        l1 
= new Literal();
                        l1.Text 
= "";
                        cell2.Controls.Add(l1);
                    }
 r.Cells.Add(cell2);
                    
this.Controls[0].Controls.AddAt(0, row);
                }

                
catch
                
{
                }

            }

            
return  res;
        }


在导出的时候,我们希望一些列不被导出,如修改,删除这样的列,因此我们添加了这样的一个属性
用于指定不被导出列,列名之间用,隔开

CODE:

string  _UnExportedColumnNames  =   "" ;
        [
  Description(
" 不导出的数据列集合,将HeaderText用,隔开 " ),
  Category(
" 扩展 " ),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        PersistenceMode(PersistenceMode.InnerProperty)
  ]
        
public   string  UnExportedColumnNames
        
{
            
get
            
{
                
return _UnExportedColumnNames;
            }

            
set
            
{
                _UnExportedColumnNames 
= value;
            }

        }



在导出的时候,原来的GridView列表中会有一些LinkButton或者DropDownList控件,导出的时候,我们也希望将其换成纯文本,用下面这个函数可以完成这个目的
用于将GridView中的LinkButton和DropDownList转换成文本的方法

CODE:

private   void  DisableControls(Control gv)
        
{
            LinkButton lb 
= new LinkButton();
            Literal l 
= new Literal();
            
string name = String.Empty;
            
for (int i = 0; i < gv.Controls.Count; i++)
            
{
                
if (gv.Controls[i].GetType() == typeof(LinkButton))
                
{
                    l.Text 
= (gv.Controls[i] as LinkButton).Text;
                    gv.Controls.Remove(gv.Controls[i]);
                    gv.Controls.AddAt(i, l);
                }

                
else if (gv.Controls[i].GetType() == typeof(DropDownList))
                
{
                    l.Text 
= (gv.Controls[i] as DropDownList).SelectedItem.Text;
                    gv.Controls.Remove(gv.Controls[i]);
                    gv.Controls.AddAt(i, l);
                }

                
if (gv.Controls[i].HasControls())
                
{
                    DisableControls(gv.Controls[i]);
                }

            }

        }



下面是处理ItemCommand,将GridView导出的代码
处理OnRowCommand事件,将GridView数据导出到Excel和Word

CODE:

 
protected   override   void  OnRowCommand(GridViewCommandEventArgs e)
        
{
            
base.OnRowCommand(e);
            
if (e.CommandName == "ExportToExcel")
            
{
                
string[] ss = UnExportedColumnNames.Split(',');
                System.Collections.Generic.List
<string> list = new System.Collections.Generic.List<string>();
                
foreach (string s in ss)
                
{
                    
if (s != ",")
                    
{
                        list.Add(s);
                    }

                }

                ShowToolBar 
= false;
                
this.AllowSorting = false;
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.AddHeader(
"content-disposition",
                
"attachment;filename=" + ExcelFileName + ".xls");
                HttpContext.Current.Response.Charset 
= "GB2312";
                HttpContext.Current.Response.ContentEncoding 
= System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
                HttpContext.Current.Response.ContentType = "application/ms-excel";

                System.IO.StringWriter stringWrite 
= new System.IO.StringWriter();
                System.Web.UI.HtmlTextWriter htmlWrite 
=
                
new HtmlTextWriter(stringWrite);
                
bool showCheckAll = ShowCheckAll;
                
this.ShowCheckAll = false;
                
this.AllowPaging = false;
                OnBind();
                DisableControls(
this);
                
foreach (DataControlField c in this.Columns)
                
{
                    
if (list.Contains(c.HeaderText) && !string.IsNullOrEmpty(c.HeaderText))
                    
{
                        c.Visible 
= false;
                    }

                }

                
this.RenderControl(htmlWrite);
                
string content = System.Text.RegularExpressions.Regex.Replace(stringWrite.ToString(), "(<a[^>]+>)|(</a>)""");
                HttpContext.Current.Response.Write(content);
                HttpContext.Current.Response.End();
                
this.AllowPaging = true;
                
this.AllowSorting = true;
                ShowToolBar 
= true;
                
this.ShowCheckAll = showCheckAll;
                OnBind();
            }

            
else if (e.CommandName == "ExportToWord")
            
{
                
string[] ss = UnExportedColumnNames.Split(',');
                System.Collections.Generic.List
<string> list = new System.Collections.Generic.List<string>();
                
foreach (string s in ss)
                
{
                    
if (s != ",")
                    
{
                        list.Add(s);
                    }

                }

                ShowToolBar 
= false;
                
this.AllowSorting = false;
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.AddHeader(
"content-disposition",
                
"attachment;filename=" + ExcelFileName + ".doc");
                HttpContext.Current.Response.Charset 
= "GB2312";
                HttpContext.Current.Response.ContentEncoding 
= System.Text.Encoding.GetEncoding("GB2312");//设置输出流为简体中文
                HttpContext.Current.Response.ContentType = "application/ms-word";

                System.IO.StringWriter stringWrite 
= new System.IO.StringWriter();
                System.Web.UI.HtmlTextWriter htmlWrite 
=
                
new HtmlTextWriter(stringWrite);
                
bool showCheckAll = ShowCheckAll;
                
this.ShowCheckAll = false;
                
this.AllowPaging = false;
                OnBind();
                DisableControls(
this);
                
foreach (DataControlField c in this.Columns)
                
{
                    
if (list.Contains(c.HeaderText) && !string.IsNullOrEmpty(c.HeaderText))
                    
{
                        c.Visible 
= false;
                    }

                }

                
this.RenderControl(htmlWrite);
                
string content = System.Text.RegularExpressions.Regex.Replace(stringWrite.ToString(), "(<a[^>]+>)|(</a>)""");
                HttpContext.Current.Response.Write(content);
                HttpContext.Current.Response.End();
                
this.AllowPaging = true;
                
this.AllowSorting = true;
                ShowToolBar 
= true;
                ShowCheckAll 
= showCheckAll;
                OnBind();
            }

        }



使用的时候,只要指定ShowExportExcel=True,ShowExportWord=True就自动出现导出Word和导出Excel的按钮了,点击自动会将GridView中的数据导出到Word或者Excel中了,如果原GridView是多页的,那也会自动将全部数据(而不是当前页的数据)导出,而且会剔除原来数据中的一些超级链接。使用起来相当简单,效果页非常好。
 在web应用程序中,我们是不是很发愁打印问题,您是不是有过为了打印写Activex的经历,我们有没有想过,Word和Excel的打印功能能被我们利用起来呢?只要我们将我们将数据导出到Excel或者Word中,打印岂不是小case了么。下面就谈谈如何让GridView自己支持导出Excel和Word 。
    首先增加了两个属性,用于指示是否支持Excel导出和Word导出

CODE:
 
// 增加了一个设置是否显示“导出Word”按钮的属性
         /**/ /// <summary>
        
/// 排序提示信息
        
/// </summary>

        [
        Description(
" 显示导出到Word " ),
        Category(
" 扩展 " ),
        DefaultValue(
true )
        ]
        
public   virtual   bool  ShowExportWord
        
{
            
get
            
{
                
object obj2 = this.ViewState["ShowExportWord"];
                
if (obj2 != null)
                
{
                    
return (bool)obj2;
                }

                
return true;
            }

            
set
            
{
                
bool aShowExportWord = this.ShowExportWord;
                
if (value != aShowExportWord)
                
{
                    
this.ViewState["ShowExportWord"= value;
                    
if (base.Initialized)
                    
{
                        
base.RequiresDataBinding = true;
                    }

                }

            }

        }

        
// 增加了一个设置是否显示“导出Excel”按钮的属性
        [
      Description(
" 显示导出到Excel " ),
      Category(
" 扩展 " ),
      DefaultValue(
true )
      ]
        
public   virtual   bool  ShowExportExcel
        
{
            
get
            
{
                
object obj2 = this.ViewState["ShowExportExcel"];
                
if (obj2 != null)
                
{
                    
return (bool)obj2;
                }

                
return true;
            }

            
set
            
{
                
bool aShowExportExcel = this.ShowExportExcel;
                
if (value != aShowExportExcel)
                
{
                    
this.ViewState["ShowExportExcel"= value;
                    
if (base.Initialized)
                    
{
                        
base.RequiresDataBinding = true;
                    }

                }

            }

        }



声明两个LinkButton控件btnExportWord,btnExport,分别用于点击导出Excel和点击导出word,并在控件的OnInit事件中初始化两个控件
声明两个LinkButton,并在控件的OnInit中初始化

CODE:

// 增加了一个设置是否显示“导出Word”按钮的属性
         /**/ /// <summary>
        
/// 排序提示信息
        
/// </summary>

        [
        Description(
" 显示导出到Word " ),
        Category(
" 扩展 " ),
        DefaultValue(
true )
        ]
        
public   virtual   bool  ShowExportWord
        
{
            
get
            
{
                
object obj2 = this.ViewState["ShowExportWord"];
                
if (obj2 != null)
                
{
                    
return (bool)obj2;
                }

                
return true;
            }

            
set
            
{
                
bool aShowExportWord = this.ShowExportWord;
                
if (value != aShowExportWord)
                
{
                    
this.ViewState["ShowExportWord"= value;
                    
if (base.Initialized)
                    
{
                        
base.RequiresDataBinding = true;
                    }

                }

            }

        }

        
// 增加了一个设置是否显示“导出Excel”按钮的属性
        [
      Description(
" 显示导出到Excel " ),
      Category(
" 扩展 " ),
      DefaultValue(
true )
      ]
        
public   virtual   bool  ShowExportExcel
        
{
            
get
            
{
                
object obj2 = this.ViewState["ShowExportExcel"];
                
if (obj2 != null)
                
{
                    
return (bool)obj2;
                }

                
return true;
            }

            
set
            
{
                
bool aShowExportExcel = this.ShowExportExcel;
                
if (value != aShowExportExcel)
                
{
                    
this.ViewState["ShowExportExcel"= value;
                    
if (base.Initialized)
                    
{
                        
base.RequiresDataBinding = true;
                    }

                }

            }

        }




将两个LinkButton添加到GridView子控件中。

CODE:

protected   override   int  CreateChildControls(System.Collections.IEnumerable dataSource,  bool  dataBinding)  {
            
int res = base.CreateChildControls(dataSource, dataBinding);
                
try
                
{
                    GridViewRow row 
= new GridViewRow(00, DataControlRowType.Pager, DataControlRowState.Normal);  TableCell cell2 = new TableCell();
                    cell2.HorizontalAlign 
= HorizontalAlign.Right;
                    cell2.Wrap 
= falseif (this.ShowExportExcel == true)
                    
{
                        l1 
= new Literal();
                        l1.Text 
= " [";
                        cell2.Controls.Add(l1);
                        cell2.Controls.Add(btnExport);
                        l1 
= new Literal();
                        l1.Text 
= "";
                        cell2.Controls.Add(l1);
                    }

                    
if (this.ShowExportWord == true)
                    
{
                        l1 
= new Literal();
                        l1.Text 
= " [";
                        cell2.Controls.Add(l1);
                        cell2.Controls.Add(btnExportWord);
                        l1 
= new Literal();
                        l1.Text 
= "";
                        cell2.Controls.Add(l1);
                    }
 r.Cells.Add(cell2);
                    
this.Controls[0].Controls.AddAt(0, row);
                }

                
catch
                
{
                }

            }

            
return  res;
        }


在导出的时候,我们希望一些列不被导出,如修改,删除这样的列,因此我们添加了这样的一个属性
用于指定不被导出列,列名之间用,隔开

CODE:

string  _UnExportedColumnNames  =   "" ;
        [
  Description(
" 不导出的数据列集合,将HeaderText用,隔开 " ),
  Category(
" 扩展 " ),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Content),
        PersistenceMode(PersistenceMode.InnerProperty)
  ]
        
public   string  UnExportedColumnNames
        
{
            
get
            
{
                
return _UnExportedColumnNames;
            }

            
set
            
{
                _UnExportedColumnNames 
= value;
            }

        }



在导出的时候,原来的GridView列表中会有一些LinkButton或者DropDownList控件,导出的时候,我们也希望将其换成纯文本,用下面这个函数可以完成这个目的
用于将GridView中的LinkButton和DropDownList转换成文本的方法

CODE:

private   void  DisableControls(Control gv)
        
{
            LinkButton lb 
= new LinkButton();
            Literal l 
= new Literal();
            
string name = String.Empty;
            
for (int i = 0; i < gv.Controls.Count; i++)
            
{
                
if (gv.Controls[i].GetType() == typeof(LinkButton))
                
{
                    l.Text 
= (gv.Controls[i] as LinkButton).Text;
                    gv.Controls.Remove(gv.Controls[i]);
                    gv.Controls.AddAt(i, l);
                }

                
else if (gv.Controls[i].GetType() == typeof(DropDownList))
                
{
                    l.Text 
= (gv.Controls[i] as DropDownList).SelectedItem.Text;
                    gv.Controls.Remove(gv.Controls[i]);
                    gv.Controls.AddAt(i, l);
                }

                
if (gv.Controls[i].HasControls())
                
{
                    DisableControls(gv.Controls[i]);
                }

            }

        }



下面是处理ItemCommand,将GridView导出的代码
处理OnRowCommand事件,将GridView数据导出到Excel和Word

CODE:



使用的时候,只要指定ShowExportExcel=True,ShowExportWord=True就自动出现导出Word和导出Excel的按钮了,点击自动会将GridView中的数据导出到Word或者Excel中了,如果原GridView是多页的,那也会自动将全部数据(而不是当前页的数据)导出,而且会剔除原来数据中的一些超级链接。使用起来相当简单,效果页非常好。
 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我可以为您提供一个简单的Android GridView程。 GridView是一个用于Android应用程序中显示网格数据的视图组件。GridView类似于ListView,但它可以显示多列数据,而ListView只能显示单列数据。GridView的每个单元格可以包含文本,图像或其他视图组件。 以下是使用GridView显示图像的步骤: 1. 创建一个新的Android项目并在布局文件中添加GridView组件。 2. 创建一个新的适配器类,并将其扩展为BaseAdapter类,然后实现必要的方法。 3. 在适配器类中,定义一个数组以存储要显示的图像资源的ID。 4. 在getView()方法中,获取指定位置的图像资源ID,并将其设置为ImageView组件的源。 5. 在MainActivity.java中,获取GridView组件的引用,并将其设置为适配器。 6. 运行应用程序并查看GridView中显示的图像。 以下是示例代码: ```java public class ImageAdapter extends BaseAdapter { private Context mContext; //定义一个数组以存储要显示的图像资源ID private Integer[] mThumbIds = { R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5, R.drawable.image6, R.drawable.image7, R.drawable.image8, R.drawable.image9, R.drawable.image10 }; public ImageAdapter(Context c) { mContext = c; } public int getCount() { return mThumbIds.length; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } // 在getView()方法中,获取指定位置的图像资源ID,并将其设置为ImageView组件的源 public View getView(int position, View convertView, ViewGroup parent) { ImageView imageView; if (convertView == null) { imageView = new ImageView(mContext); imageView.setLayoutParams(new GridView.LayoutParams(250, 250)); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setPadding(8, 8, 8, 8); } else { imageView = (ImageView) convertView; } imageView.setImageResource(mThumbIds[position]); return imageView; } } ``` 在MainActivity.java中: ```java public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取GridView组件的引用 GridView gridView = findViewById(R.id.grid_view); // 将适配器设置为GridView gridView.setAdapter(new ImageAdapter(this)); } } ``` 以上就是一个简单的Android GridView程。希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值