redsun0220

导航

ASP.NET中DataGrid的操作

DataGrid控件功能非常强大,如分页,排序,自定义各种外观等等,但是其也是非常影响性能的,特别是大量数据、大量用户访问时更是悲惨。:(
但是在某些时候我们使用时还是比较好。下面介绍一点点使用技巧,其实写得不好,望大家见谅。

一、如果你利用DataGrid控件本身的分页功能的话,你会发现其默认分页外观不是很满意,这时你可以手工编写代码来改变它。我们可以利用此控件中的一个事件。代码如下(当然还可以写得更个性化,更丰富一点):

 1 private void DataGrid1_ItemCreated(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
 2         {
 3             ListItemType li = e.Item.ItemType;
 4             if(li == ListItemType.Pager)
 5             {
 6                 TableCell page = (TableCell)e.Item.Controls[0];
 7                 for(int i=0;i<page.Controls.Count;i++)
 8                 {
 9                     object obj = page.Controls[i];
10                     if(obj is LinkButton)
11                     {
12                         LinkButton lb = (LinkButton)obj;
13                         lb.ToolTip = "这是第"+lb.Text+"";
14                         lb.Text = ""+lb.Text+" ]";
15                         lb.CssClass = "a";
16                     }
17                     else
18                         if(obj is Label)
19                     {
20                         Label lbl = (Label)obj;
21                         lbl.ToolTip = "当前是第"+lbl.Text+"";
22                         lbl.Text =  "第<font color=red>"+lbl.Text+"</font>页";
23                     }
24                     else
25                         if(obj is System.Web.UI.LiteralControl)
26                     {
27                         System.Web.UI.LiteralControl lt = (System.Web.UI.LiteralControl)obj;
28                         lt.Text = " ";
29                     }
30                 }
31             }
32         }


二、我们在使用DataGrid时,经常发生某些列数据太长了,我们可能想要把它进行截断,后面用"......"来表示,那么该怎么做呢。这时,既可以用后台代码来改变,也可以在页面用JS来进行控件,当然也可以用其它更好的方法来操作。下面是在CS文件中编写代码利用DataBound事件来完成的。想看JS的代码,请查阅本人写的JavasScript栏目的文章有详细介绍。
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        {
            
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.SelectedItem)
            {
                DataGridItem dgi 
= e.Item;
                
if(dgi.Cells[0].Text.Trim().Length>10)
                {
                    dgi.Cells[
0].Text = dgi.Cells[0].Text.Trim().Substring(0,10)+"";
                }
            }
        }

三、再来说一下,如何在DataGrid中使用DropDownList控件,首先我们要在DataGrid中填加一模板列,并往拉一DropDownList控件到此模板列中,然后再激活DataBound事件。并往里书写代码。如下(写得不是很好,大家可以任意发挥,根据实际情况):
 1 private void dg_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
 2         {
 3             if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem||e.Item.ItemType==ListItemType.SelectedItem)
 4             {
 5                 string[] str= e.Item.Cells[0].Text.Split('|');//此是一模板列,里面的数据按照“a|b|c”格式来排列的。
 6                 
 7                 System.Data.DataSet ds = (new ExecuteSqlProvider()).GetDataSet("select AirTypeID,AirTypeName from TTB_Dim_AirType");
 8             
 9                 DropDownList ddl = (DropDownList)(e.Item.FindControl("DDL3"));
10 
11                 for(int i=0;i<str.Length;i++)
12                 {
13                     for(int j=0;j<ds.Tables[0].Rows.Count;j++)
14                     {
15                         if(ds.Tables[0].Rows[j][0].ToString().Trim()==str[i].ToString().Trim())
16                             ddl.Items.Add(new ListItem(ds.Tables[0].Rows[j][1].ToString(),str[i]));
17                     }                    
18                 }
19                 ds.Dispose();
20             }
21         }
上面使用DropDownList是在非编辑状态下所看到的。如果你想在编辑状态下绑定另外一组数据的话,你可以在EditCommand事件编写相应的代码来重新绑定数据,以供编辑时所需。

当然以上代码都是乱七八糟的,没什么规范性的。只是起一个引子的作用,希望对别人有些用处。如你在实际运用时,可以根据实际情况而作相应的更改。

posted on 2006-01-14 10:12  镜中的毒药  阅读(499)  评论(0)    收藏  举报