在GridView中单击包含DropDownList的行会破坏DropDownList

时间:2012-03-09 18:24:19

标签: asp.net gridview

我使用以下代码和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。

1 个答案:

答案 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事件中创建它们时找到一种在元素周围添加它的方法。