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 }
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)+"![]()
";
}
}
}
{
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事件编写相应的代码来重新绑定数据,以供编辑时所需。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 }
当然以上代码都是乱七八糟的,没什么规范性的。只是起一个引子的作用,希望对别人有些用处。如你在实际运用时,可以根据实际情况而作相应的更改。
浙公网安备 33010602011771号