2012-03-09 57 views
0

我使用下面的代碼和RaisePostBackEvent函數使GridView中的行可點擊。在GridView中使包含DropDownList的行可點擊,打破DropDownList

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仍處於不可用狀態。

那麼如何讓DropDownList函數在點擊行的其他部分時仍然允許onclick函數?

注意:我目前限制使用.NET 2.0。

+1

看到這篇文章:http://stackoverflow.com/questions/6491627/prevent-table-row-onclick-event-to-fire-when-clicking-button-inside-the-row – jmaglio 2012-03-09 20:10:48

回答

1

你想要做的就是停止傳播Click事件。要做到這一點的最簡單的方法是將包裹元件在停止傳播一個div /跨度元件:

<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事件中創建元素時添加它。