首页 文章

RadGrid条件行PostBack

提问于
浏览
0

我在页面上有一个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,因为它永远不会触发,因为我在行单击时回发 .

2 回答

  • 0

    删除EnablePostBackOnRowClick - 将其设置为false . 添加RadAjaxManager(如果还没有),并手动触发PostBack . 尝试这样的事情:

    <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函数中:

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

    RowClick 事件发生在 RequestStart 之前,因此,在那一刻,您可以设置一个标志,指示不应发生回发 .

    解决方案远非干净或优雅,但它的工作原理非常简单 .

    希望能帮助到你 :)

相关问题