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 阅读(1185) 评论(2)  编辑 收藏 网摘

评论

#1楼  2005-10-11 08:37 Zeus [未注册用户]

补充:对于导出到Excel有更详尽的代码如下:
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";
this.EnableViewState = false;
System.IO.StringWriter sw = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(sw);
int nCur = dgShow.CurrentPageIndex;
int nSize = dgShow.PageSize;

dgShow.AllowPaging = false;
BindData();

dgShow.Columns[7].Visible =false;
dgShow.RenderControl(hw);
dgShow.Columns[7].Visible =true;

//以下恢复分页
dgShow.AllowPaging = true;
dgShow.CurrentPageIndex = nCur;
dgShow.PageSize = nSize;
BindData();
Response.Write(sw.ToString());
Response.End();
  回复  引用    

#2楼  2007-12-12 09:24 kino [未注册用户]

路过,学习。   回复  引用    





标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-10-11 21:15 编辑过
Google站内搜索

China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》

相关文章:

相关链接:
 

导航

公告

  •  CSDN :清柳(zeusvenus)

  •  有话说?给我一个Mail

  •  帖子以现状提供,欢迎转载:)

  •  您可以通过狗狗订阅本Blog

  •  The posts are made "AS IS" without warrnties and confers no rights.

  • <2005年10月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    统计

    与我联系

    搜索

     

    常用链接

    留言簿(7)

    我参与的团队

    随笔分类(18)

    随笔档案(196)

    文章分类(7)

    新闻分类

    相册

    我参与的团队

    最新评论

    阅读排行榜

    评论排行榜