我使用以下代码和RaisePostBackEvent函数使GridView中的行可单击。
protected void gvResults_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onclick", ClientScript.GetPostBackEventReference(this, e.Row.RowIndex.ToString()));
}
}
GridView还有一个单元格的DropDownList控件。问题是单击DropDownList来更改选择也会触发行的onclick。这导致DropDownList的选项列表可见但无法使用,因为该行的onclick也已被处理。
我尝试在DropDownList的onmouseover中设置一个标志,并在RaisePostBackEvent函数中检查它,但这只是部分成功。这阻止了RaisePostBackEvent中的功能,但仍然发生了行onclick,这意味着DropDownList仍然处于不可用状态。
那么如何在点击行的其他部分时仍然允许onclick功能的同时制作DropDownList函数?
注意:我目前限制使用.NET 2.0。
答案 0 :(得分:1)
您要做的是停止传播Click事件。最简单的方法是将元素包装在一个停止传播的div / span元素中:
<div onclick="if (event.stopPropagation){ event.stopPropagation(); } else if(window.event){ window.event.cancelBubble=true; } ">
DropDownList element here...
</div>
IE使用event.cancelBubble属性,而其他浏览器使用stopPropagation。
我不确定你是如何在Gridview中生成DropDownList元素的 - 你可以在ItemTemplate中添加它,或者在RowCreated事件中创建它们时找到一种在元素周围添加它的方法。