2013-04-18 45 views
0

我有一個radgrid控件的頁面上的帖子後面,當你點擊行,配置如下:radgrid控件有條件行回傳

<ClientSettings EnablePostBackOnRowClick="true"> 
    <Selecting AllowRowSelect="true" /> 
    <ClientEvents OnRowClick="RowClick" /> 
</ClientSettings> 

我試圖阻止回發通過停止傳播事件通過:

function RowClick(sender, e) { 
    var masterTable = sender.get_masterTableView(); 
    var hasReport = masterTable.getCellByColumnUniqueName(e.get_item(), "HasReport").innerHTML; 

    if (hasReport.trim() == "No") { 
     e.get_domEvent().preventDefault(); 
     e.get_domEvent().stopPropagation(); 
    } 
} 

但是,這是行不通的;回發仍然發生。我有一個包含兩條記錄的網格,我只需要在字段值爲「是」時進行回發,但我無法使其工作。我確信它沒有任何條件,但即使在停止傳播後,事件仍然會發生。任何想法如何停止回發?我無法使用RowSelecting,因爲它永遠不會觸發,因爲我在行單擊上回發。

+1

我以前做過這個...我正在寫一個演示,並會很快回復 –

回答

0

刪除EnablePostBackOnRowClick - 將其設置爲false。添加一個RadAjaxManager,如果你還沒有,並且手工觸發回發。嘗試是這樣的:

<telerik:RadAjaxManager runat="server" ID="ajaxMgr"></telerik:RadAjaxManager> 
<script type="text/javascript"> 

function rowClick(sender, args) { 
    var mastertable = sender.get_masterTableView(); 
    var id = mastertable.getCellByColumnUniqueName(args.get_item(), "Id").innerHTML; 

    if (id == "1") { 
     var ajaxMgr = $find("<%= ajaxMgr.ClientID %>"); 
     ajaxMgr.ajaxRequestWithTarget("<%= grid.UniqueID %>", id); 
    } 

} 

</script> 

然後您需要處理的代碼隱藏的RaisePostBackEvent方法:

protected override void RaisePostBackEvent(IPostBackEventHandler sourceControl, string eventArgument) 
{ 
    // Do something interesting 
} 
0

所有你需要做的是防止與OnRequestStart事件的Ajax調用時,你的條件是實現。要做到這一點,你必須:

OnRequestStart並返回false,如果你的行已經剛剛點擊:

在您的JS:

var myRowHaveBeenClicked = false; 

function OnRequestStart(){ 
    if(myRowHaveBeenClicked){ 
     myRowHaveBeenClicked = false; 
     return false; 
    } 
} 

在你的ASP:

<telerik:RadAjaxManager runat="server" ID="ajaxmanager"> 
    <clientevents onRequeststart="OnRequestStart" /> 
    ....... 

所有剩下的事情就是在你的rowClick函數中設置myRowHaveBeenClicked標誌。

在你RowClick功能:

​​

RowClick事件RequestStart之前發生,所以,在那一刻,你可以設置一個標誌,指示不應該發生的回發。

解決方案遠非乾淨或優雅,但它的工作原理非常簡單。

希望它有幫助:)