为什么GridView里的Imagebutton要点击两次才触发Click事件

lin_yc21 2009-09-27 11:23:51

我本来是想实现双击两次GrilView的行就改变该行的背景颜色,在网上找到了一种方法,如下:
在Page_Load事件里添加:

if(!IsPostBack)
{
ViewState["rowID"] = 1;
}


在GridView1_RowDataBound事件里添加:

e.Row.ID = "tr_" + ((int)ViewState["rowID"]);
e.Row.Attributes.Add("style", "background-color:#FFFFFF;");
e.Row.Attributes.Add("ondblclick", "setValueByTr(this)");
ViewState["rowID"] = ((int)ViewState["rowID"]) + 1;


setValueByTr(this)是一个Javascript函数,如下:

var par = "";
function setValueByTr(obj) {
var trid = obj.id;
if (par == "" || par == trid) {
document.getElementById(trid).style.backgroundColor = "#6699ff";
par = obj.id;
} else {
document.getElementById(par).style.backgroundColor = "#FFFFFF";
document.getElementById(trid).style.backgroundColor = "#6699ff";
par = obj.id;
}
}


后来我觉得可能问题就出在GridView1_RowDataBound事件里的那几行代码,注释掉之后就正常了,一旦加上去之后imagebutton控件又得点击两次才执行Click事件。

下面是我调试总结出来的结果:
现象描述:
1、进入页面之后随便点击一次某行的Imagebutton控件页面刷新一次,但是没有执行Imagebutton控件的Click事件;
2、第一次点击之后查看源代码,所有设置的ID属性都不见了;
3、当一进页面就随便点击某行的Imagebutton之后(第一次不执行Click事件),接下来无论再点击哪一行的Imagebutton就能执行Click事件了,但是却无法双击改变背景颜色了,原因应该是第二点导致的,ID属性不见了,可是Imagebutton的Click事件却能正常执行,奇怪。

说到这里不知道您能不能看明白,您可以新建一个项目试试看,应该也会出现同样的问题。
我在网上搜了很多也要点击两次的问题,但是那些都不是因为加了这几行代码才导致了,所以我也找不到答案了,期待您的解答,互相交流,谢谢!
...全文
280 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lin_yc21 2011-11-26
  • 打赏
  • 举报
回复
发现还没结贴,汗
heyalin 2009-09-27
  • 打赏
  • 举报
回复
我知道一个光棒效果...可以和大家分享以下:(当鼠标移动到gridview中某一行时.改变颜色)
protected void gvbooks_RowDataBound(object sender,GridViewRowEventArgs e)
{
if(e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onmouseover","currentcolor = this.style.backgroundColor;this.style.backgroundColor = '#999999'");
e.Row.Attributes.Add("onmouseout","this.style.backgroundColor = currentcolor");
}
}
szaf31954 2009-09-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 szaf31954 的回复:]
e.Row.ID = "tr_" + ((int)ViewState["rowID"]);
e.Row.Attributes.Add("style", "background-color:#FFFFFF;");
e.Row.Attributes.Add("ondblclick", "setValueByTr(this)");
ViewState["rowID"] = ((int)ViewState["rowID"]) + 1;

问题应该就出在这里 你把这地方改成:
e.row.Attributes.Add("onclick","setValueByTr(this)");
再试试看

你这里添加的dblclick的方法

[/Quote]

还有取不到ID的问题是否有些应该写在if(!IsPostBack)里的方法没有写对位置
szaf31954 2009-09-27
  • 打赏
  • 举报
回复
e.Row.ID = "tr_" + ((int)ViewState["rowID"]);
e.Row.Attributes.Add("style", "background-color:#FFFFFF;");
e.Row.Attributes.Add("ondblclick", "setValueByTr(this)");
ViewState["rowID"] = ((int)ViewState["rowID"]) + 1;

问题应该就出在这里 你把这地方改成:
e.row.Attributes.Add("onclick","setValueByTr(this)");
再试试看

你这里添加的dblclick的方法
randomfeel 2009-09-27
  • 打赏
  • 举报
回复
两个建议
1、是否有些代码写在if(!IsPostBack)之外了
2、是否有些控件被不小心设置为AutoPostBack了
l8487 2009-09-27
  • 打赏
  • 举报
回复
兄弟你饶了远路了。在你的gridview中加如一个javascript的鼠标双击事件。如下。
双击表格某行。某行改变颜色。只需在Table中加入一个鼠标双击事件。用javascript实现就行。根本用不到服务器代码。。
<script>
var orows;//当前行
var rowscount;//总行数
function ChangColor()
{
rowscount=document.getElementById("ListGrid").rows.length;
var e = e || window.event;
var otarget = e.srcElement || e.target;
var rowindex=otarget.parentElement.rowIndex;
if(otarget.parentNode.tagName.toLowerCase() == "tr"&&rowindex!=0&&rowindex!=rowscount)
{
if(typeof(orows)=="undefined")
{
orows = otarget.parentNode;
orows.style.backgroundColor = "#e7e7ff";
}
else
{
orows.style.backgroundColor = "#e7e7ff";
orows = otarget.parentNode;
orows.style.backgroundColor = "#FFFF99";
}
if(e.type=="dblclick")
{
returnValue=orows.children[0].innerText;
close();
}
}
}
</script>
这段javascript实现鼠标在某行的时候变色。。你根据自己情况改改啊。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧