Asp.NET(c#)DataGrid鼠标悬停项改变颜色,移除恢复

本文介绍如何使用 ASP.NET 中的 DataGrid 控件,并通过 C# 和 JavaScript 实现鼠标悬停时行背景颜色的变化效果。

前台

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="DataGridMouseEvent.WebForm1" %> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 
<HTML> 
<HEAD> 
<title>WebForm1</title> 
<meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> 
<meta name="CODE_LANGUAGE" Content="C#"> 
<meta name="vs_defaultClientScript" content="JavaScript"> 
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> 
</HEAD> 
<body MS_POSITIONING="GridLayout"> 
<form id="Form1" method="post" runat="server"> 
<FONT face="宋体"> 
<asp:DataGrid id="DataGrid1" style="Z-INDEX: 101; LEFT: 376px; POSITION: absolute; TOP: 88px" 
runat
="server"></asp:DataGrid></FONT> 
</form> 
</body> 
</HTML> 

后台

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace DataGridMouseEvent
{
    
/// <summary>
    
/// WebForm1 的摘要说明。
    
/// </summary>

    public class WebForm1 : System.Web.UI.Page
    
{
        
protected System.Web.UI.WebControls.DataGrid DataGrid1;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
if(!Page.IsPostBack)
            
{
                DataTable MyTable
=new DataTable();            
                MyTable.Columns.Add(
new DataColumn("Name",typeof(String)));
                MyTable.Columns.Add(
new DataColumn("Age",typeof(Int32)));
                DataRow row1
=MyTable.NewRow();
                DataRow row2
=MyTable.NewRow();
                row1[
"Name"]="张三";
                row1[
"Age"]=20;
                row2[
"Name"]="李四";
                row2[
"Age"]=21;
                MyTable.Rows.Add(row1);
                MyTable.Rows.Add(row2);
                DataGrid1.Attributes.Add(
"ItemColor","#ffffff");
                DataGrid1.Attributes.Add(
"AlterNateColor","oldlace");
                DataGrid1.DataSource
=MyTable;
                DataGrid1.DataBind();
            }

        }


        
Web 窗体设计器生成的代码

        
private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        
{
            
if(e.Item.ItemType==ListItemType.Item)
            
{    e.Item.Attributes.Add("bgcolor","#FFFFFF");
                e.Item.Attributes.Add(
"onmouseover","this.bgColor='#C1D2EE'");
                e.Item.Attributes.Add(
"onmouseout","this.bgColor=document.getElementById('DataGrid1').getAttribute('ItemColor')");
            }

            
if(e.Item.ItemType==ListItemType.AlternatingItem)
            
{
                e.Item.Attributes.Add(
"bgcolor","oldlace");
                e.Item.Attributes.Add(
"onmouseover","this.bgColor='#C1D2EE'");
                e.Item.Attributes.Add(
"onmouseout","this.bgColor=document.getElementById('DataGrid1').getAttribute('AlterNateColor')");
            }

        }

    }

}

    最早的思路是:设计时设置交替项的背景色,然后判断,如果是交替项就设置一种颜色,如果是普通项就设置一种颜色。但是发现如果提前设置交替项的颜色或者普通项的颜色那么这种方法就不管用了,所以不能提前给交替项或者普通项设置颜色,要在事件中设置颜色:{e.Item.Attributes.Add("bgcolor","oldlace");}这样后面的方法才起作用。

这里在DataGrid中加入了两个属性“ItemColor ” ,  “AlterNateColor”。用来存放普通项和交替项的背景色,然后在后面的事件中使用“this.bgColor=document.getElementById('DataGrid1').getAttribute('ItemColor')”这种方法提取,我认为使用javascript这种前台的提取方式比较迅速。我原本想使用“e.Item.Attributes.Add("onmouseout","this.bgColor=/""+DataGrid1.Attributes["ItemColor"]+"/"");”这种方法的,发现这种方法需要调用后台服务器端资源,把原本可以客户端处理的东西放在了服务器处理,浪费了很多资源。再做东西的时候要多思考,那一种更好,为什么别人要使用这个。这是我从“孟子E章“哪里学来的。

在DataGrid中不论你是否设置交替项,Asp.net都会把双数项的类型设置为交替项。

------这个例子是我参考“孟子E章”的网站代码写出来的。他那里还有很多比较实用,写的很明了的代码。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值