[翻译]GridView中单击TextBox后使所在的行高亮

本文介绍了一种在ASP.NET GridView控件中实现当TextBox获得焦点时其所在行高亮显示的方法。通过添加自定义JavaScript代码,实现了行的背景颜色变化,并在失去焦点时恢复原状。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要:本文翻译自AzamSharp 的文章Highlighting Rows with TextBox OnFocus<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

地址是:http://gridviewguy.com/ArticleDetails.aspx?articleID=194。在保证原文意思的基础上有些地方用了自己的理解来翻译。

 

介绍:作者(原文中的”I”,下同)以前曾写过如何实现当鼠标经过GridView的一个行时使其变成高亮。在另外一篇文章中作者介绍了如何实现让GridView当中的行可以当其被单击的时候变成高亮。在这个文章中,作者会介绍如何实现当GridView控件当中的一个TextBox获得焦点后其所在的行变成高亮。

 

相关:

当鼠标移过的时候GridView的行改变:这篇文章描述怎么实现当鼠标指针指向一个行的时候让其颜色发生变化。

当鼠标单击的时候GridView的行改变:这篇文章描述当用户单击一个行的时候如何改变其颜色。

 

数据库:

在本文中作者用到一个名为“School”的数据库。这个数据库包含一个叫Users的表,里面记录用户的信息。此表的具体结构请参见下图:

 

 

数据填充到GridView:

第一步需要做的是填充GridView控件,下面的BindData方法是用来连接数据库并且把需要的数据装入到GridView控件当中的。此方法如下所示:

 1 None.gif private   void  BindData()
 2 None.gif
 3 ExpandedBlockStart.gifContractedBlock.gif dot.gif {
 4InBlock.gif
 5InBlock.gifSqlConnection myConnection 
 6InBlock.gif
 7InBlock.gif= new SqlConnection("Server=localhost;Database=School;Trusted_Connection=true");
 8InBlock.gif
 9InBlock.gifSqlDataAdapter ad = new SqlDataAdapter("SELECT * FROM Users", myConnection);
10InBlock.gif
11InBlock.gifDataSet ds = new DataSet();
12InBlock.gif
13InBlock.gifad.Fill(ds); 
14InBlock.gif
15InBlock.gif// assign the data source 
16InBlock.gif
17InBlock.gifgvUsers.DataSource = ds;
18InBlock.gif
19InBlock.gifgvUsers.DataBind(); 
20InBlock.gif
21ExpandedBlockEnd.gif}

22 None.gif

下一步需要做的就是填加一个

TextBox 控件到 GridView 控件里,这个 TextBox 控件就是要实现的当其获得焦点时使其所在的行变成高亮。

填加一个有TextBox控件的模板列:

为了填加一个TextBoxGridView里我们需要建立一个模板列。大多数情况下作者(包括我在内)还是建议用模板列来代替数据绑定列的,因为摸板列里的控件你是可以通过编程的方法访问到的,比如FindControl(注:此处为根据自己的理解所译,原文为:The reason is that by using the Template Column you can refer to the column by finding the control which exists inside the column)。而数据绑定的列只能以索引的方式来访问,这样如果你以后要再插入一个列的话,那么相关的列的索引值就会发生变化。我们插入到GridView的摸板列的代码如下所示:

 1 None.gif < asp:GridView  ID ="gvUsers"  runat ="server"  CellPadding ="4"  Font-Names ="Verdana"  ForeColor ="#333333"  GridLines ="None"  OnRowDataBound ="gvUsers_RowDataBound" >
 2 None.gif
 3 None.gif < Columns >
 4 None.gif
 5 None.gif < asp:TemplateField  HeaderText ="Points" >
 6 None.gif
 7 None.gif < ItemTemplate >
 8 None.gif
 9 None.gif < asp:TextBox  ID ="txtPoint"  runat ="server"   />
10 None.gif
11 None.gif </ ItemTemplate >
12 None.gif
13 None.gif </ asp:TemplateField >
14 None.gif
15 None.gif < asp:TemplateField  HeaderText ="First Name" >  
16 None.gif
17 None.gif < ItemTemplate >
18 None.gif
19 None.gif < asp:Label  ID ="lblFirstName"  runat ="server"  Text ='<%#  Eval("FirstName") % > ' />
20 None.gif
21 None.gif </ ItemTemplate >
22 None.gif
23 None.gif </ asp:TemplateField >
24 None.gif
25 None.gif < asp:TemplateField  HeaderText ="Address" >
26 None.gif
27 None.gif < ItemTemplate >
28 None.gif
29 None.gif < asp:Label  ID ="lblAddress"  runat ="server"  Text ='<%#  Eval("Address") % > ' />
30 None.gif
31 None.gif </ ItemTemplate >
32 None.gif
33 None.gif </ asp:TemplateField >  
34 None.gif
35 None.gif </ Columns >
36 None.gif
37 None.gif < FooterStyle  BackColor ="#990000"  Font-Bold ="True"  ForeColor ="White"   />
38 None.gif
39 None.gif < RowStyle  CssClass ="RowStyleBackGroundColor"  ForeColor ="#333333"   />
40 None.gif
41 None.gif < SelectedRowStyle  BackColor ="#FFCC66"  Font-Bold ="True"  ForeColor ="Navy"   />
42 None.gif
43 None.gif < PagerStyle  BackColor ="#FFCC66"  ForeColor ="#333333"  HorizontalAlign ="Center"   />
44 None.gif
45 None.gif < HeaderStyle  BackColor ="#990000"  Font-Bold ="True"  ForeColor ="White"   />
46 None.gif
47 None.gif < AlternatingRowStyle  CssClass ="RowAlternateStyleBackGroundColor"   />
48 None.gif
49 None.gif </ asp:GridView >
50 None.gif
51 None.gif

现在,我们运行一下程序来看看GridView中的数据,此数据是我们虚拟出来的。

 

 

你可能留意到了作者应用了CSS,此CSS如下所示:

None.gif .RowStyleBackGroundColor
None.gif
ExpandedBlockStart.gifContractedBlock.gif
{dot.gif} {
InBlock.gif
InBlock.gifbackground-color
:#FFFBD6; 
InBlock.gif
ExpandedBlockEnd.gif
}

None.gif
None.gif.RowAlternateStyleBackGroundColor 
None.gif
ExpandedBlockStart.gifContractedBlock.gif
{dot.gif} {
InBlock.gif
InBlock.gifbackground-color
:White; 
InBlock.gif
ExpandedBlockEnd.gif
}

None.gif
None.gif.HighLightRowColor 
None.gif
ExpandedBlockStart.gifContractedBlock.gif
{dot.gif} {
InBlock.gif
InBlock.gifbackground-color
:Yellow; 
InBlock.gif
ExpandedBlockEnd.gif
}

None.gif

最后我们需要实现的就是当

GridView 里的 TextBox 获得焦点的时候让其所在的行变成高亮的功能。

JavaScript实现高亮:

我们需要在TextBox获得焦点的时候让其所在的行变成高亮。我们可以填加客户端”OnFoucs”事件到TextBox控件中。这个获得焦点的时间当控件获得焦点的时候被触发。让我们来看看如下的代码是如何填加这个事件到TextBox控件当中的。

 

None.gif < asp:TextBox  onFocus ="ChangeColor()"  ID ="txtPoint"  runat ="server"   />

 

方法ChangeColor()的实现如下。同样,你会注意到有一个变量oldRowColor被声明成public用来记录上一个颜色的名。属性window.event.srcElement是用来获得出发这个事件控件的名。obj.parentElement.parentElement会返回<tr>标记代表当前行已经被创建完毕。后面的"HighLightRowColor"值被赋给被高亮的那一行的obj类类型。

None.gif < script language = " javascript " >
None.gif
None.gifvar oldRowColor; 
None.gif
None.gif
//  this function is used to change the backgound color 
None.gif

None.giffunction ChangeColor() 
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
InBlock.gifvar obj 
= window.event.srcElement;
InBlock.gif
InBlock.gif
if(obj.tagName == "INPUT" && obj.type == "text"
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
InBlock.gifobj 
= obj.parentElement.parentElement;
InBlock.gif
InBlock.gifoldRowColor 
= obj.className; 
InBlock.gif
InBlock.gifobj.className 
= "HighLightRowColor";
InBlock.gif
ExpandedSubBlockEnd.gif}
 
InBlock.gif
ExpandedBlockEnd.gif}

None.gif

到目前为止还没有完成,我们需要实现

onBlur 事件来实现当用户焦点离开控件时发生的动作,代码如下:

 

None.gif < asp:TextBox  onBlur ="ResetColor()"  onFocus ="ChangeColor()"  ID ="txtPoint"  runat ="server"   />

 

下面的代码是方法ResetColor的实现。

None.gif //  this function is used to reset the background color 
None.gif

None.gif
function  ResetColor() 
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
InBlock.gif
var obj = window.event.srcElement;
InBlock.gif
InBlock.gif
if(obj.tagName == "INPUT" && obj.type == "text"
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif
InBlock.gifobj 
= obj.parentElement.parentElement;
InBlock.gif
InBlock.gifobj.className 
= oldRowColor; 
InBlock.gif
ExpandedSubBlockEnd.gif}
 
InBlock.gif
ExpandedBlockEnd.gif}

None.gif

ResetColor

简单地把类的名通过公共变量 oldRowColor 赋给了类的名。这个方法把列恢复成原来的颜色。

 

 

现在运行这个程序然后把鼠标移到GridView里的文本框上,那么这一行就变成了高亮状态。这个功能当你有包含大量记录的GridView控件提供给用户更好的体验是很有用的。而当用户在输入数据时,当他们想确定正在输入的是哪行数据的时候是很管用的。

 

总结:

高亮状态的行可以通过很多不同的方法来实现并且也取决于程序的环境。本文作者并没有提及当GridView处于编辑状态时的情况。

I hope you liked the article, happy coding!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值