Webcast收听笔记之二——《DataGrid最佳实践》

 《DataGrid最佳实践》(邵志东主讲,他讲课很不错)
------------------------------------------------------------------------------------------------------------------
 在datagrid的删除列为了避免最后一条删除问题,应加入:
 if(DataGrid1.Items.Count=1)
 {
  if(DataGrid1.CurrentPageIndex!=0)
   DataGrid1.CurrentPageIndex=DataGrid1.CurrentPageIndex-1;
 }
------------------------------------------------------------------------------------------------------------------
 添加删除确认对话框过程:创建模板列,在模板列中加按钮并设定按钮名称与commandname(下例中设为UserDelete)等属性,
 在datagrid的itemcreated 事件中写入:
 switch(e.Item.ItemType)
 {
  case ListItemType.Item;
  case ListItemType.EditItem;
  ListItemType.AlternatingItem;
    Button myDeleteButton=(Button)e.Item.FindControl("btnDelete");
    myDeleteButton.Text="删除此列";
   //添加上删除该行的提示。下面这种从第0行开始,为了人性化可以提示为e.Item.ItemIndex+1行。
    myDeleteButton.Attributes.Add("onclick","return confirm('您真的要删除第"+e.Item.ItemIndex.ToString()+"行吗??');");
    break;
 }
 具体删除在datagrid的ItemCommand(object source,System.Web.UI.WebControls.DataGridCommandEventArgs e)事件中写入: 
  if(e.CommandName=="UserDelete")
   DataGrid1_DeleteCommand(source,e);
------------------------------------------------------------------------------------------------------------------
 全选是在html中手动加的,剩余工作在代码中轮询,详见video45分钟左右。|||Button.Attributes.Add是加客户端属性的。
------------------------------------------------------------------------------------------------------------------
 加统计值首先设定datagrid的showfooter为true,然后循环求值并加和。然后可以做平均或者什么的。
 int count=0;
 for (int i=0;i<ds.Tables[0].Rows.Count;i++)
 {
  //求总分
  count+=int.Parse(ds.Tables[0].Rows[i]["Score"].ToString());
 }
  //求均分
 int nAv=count/ds.Tables[0].Rows.Count;
  //轮询,把需要加统计值的都加上。
 foreach(DataGridItem dgi in DataGrid1.Controls[0].Controls)
 {
 if(dgi.ItemType==ListItemType.Footer)
  dgi.Cells[6].Text="平均:"+nAv.ToString();
 }
------------------------------------------------------------------------------------------------------------------
 指定编辑状态下文本框的宽度和格式,应写在datagrid的ItemDataBound()事件中如下代码:
 if(e.Item.ItemType==ListItemType.EditItem)
 {
 for(int i=0,i<e.Item.Cells.Count;i++)
  {
   if(e.Item.Cells[i].Controls.Count>0)
   {
    try
    {
     TextBox t=(TextBox)e.Item.Cells[i].Controls[0];
     //这样定义的每个都一样宽。
     t.Width=100;
    }
    catch
    {
    }
   }
  }
 }
------------------------------------------------------------------------------------------------------------------
 隐藏列很简单,在BindGrid()时写DataGrid1.Columns[0].visible=false;即可。
------------------------------------------------------------------------------------------------------------------
 DataGrid导出成excel也很简单。两种方法:用浏览器的response方法或excel自动化方式,前者稍安全些,后者用组件方式。
 页面上加个导出按钮并在其代码中写入:
 //指定浏览器类型
 Response.ContentType="applicaion/vnd.ms-excel";
 //字符集是空
 Response.Charset="";
 this.EnalbeViewState=false;
 System.IO.StringWriter sw=new System.IO.StringWriter();
 System.Web.UI.HtmlTextWriter hw=new System.Web.UI.HtmlTextWriter(sw);
 DataGrid1.RenderControl(hw);
 //也可指定路径
 Response.Write(sw.ToString());
 Response.End();
------------------------------------------------------------------------------------------------------------------
 ItemCreated是每一项创建时执行;ItemDataBound是执行datagrid.databind时执行的。
------------------------------------------------------------------------------------------------------------------
 要往datagrid中添加一行一般用新页面处理,也可以加到dataset一行并绑定到数据库和datagrid上。
------------------------------------------------------------------------------------------------------------------
 要导pdf需要用水晶报表。
------------------------------------------------------------------------------------------------------------------
 datagrid上所有列都改成模板列实际上就是repeater了。

posted on 2005-10-10 21:22  Zeus  阅读(1798)  评论(2编辑  收藏  举报

导航