【问题标题】:radgrid -get server edited rows in client sideradgrid - 在客户端获取服务器编辑的行
【发布时间】:2013-10-16 14:08:22
【问题描述】:

我有一个 radgrid asp.net 控件,我在其中编辑服务器端的行。 我想在客户端知道,以防用户在保存/放弃网格中的更改之前尝试关闭屏幕。

我发现了一些关于如何做到这一点的解释:get_masterTableView

但是,由于我不是在客户端编辑,所以调用此函数 导致异常(其中调用 get_id 失败)。

如何知道网格在客户端是否处于编辑模式?

谢谢, 奥马尔

【问题讨论】:

    标签: javascript jquery asp.net telerik radgrid


    【解决方案1】:

    我没有在 RadGrid 上做更多的工作。相反,我可以给你一个解决方法。试一试,可能会奏效。它很简单。

    您可以使用隐藏字段。当您进入网格编辑模式时,您可以将隐藏字段值设置为 true 或您想要从后面的代码中获取的任何值。在行提交时清除该值,以便您确定该网格是否已打开以进行编辑。如果用户关闭表单或做任何事情,那么您可以从 javascript 中检测到隐藏的值。

    就是这样。

    【讨论】:

    • 谢谢,这就是我的想法——但我希望有一种更清洁的方法来做到这一点。 (我有多个带有多个网格的控件,我想避免为每个控件放置一个隐藏字段)。
    【解决方案2】:

    请尝试以下代码 sn-p。

    <telerik:RadCodeBlock ID="RadCodeBlock1" runat="server">
            <script>
                function getEditInsertCount() {
    
    
                    var grid = $find("<%= RadGrid1.ClientID %>");
                    if (grid) {
                        var MasterTable = grid.get_masterTableView();
                        if (MasterTable.get_insertItem() != null) {
                            alert('grid in insert mode');
                        }
    
                        if (grid.get_editItems().length > 0) {
                            alert('grid in edit mode, Row count: ' + grid.get_editItems().length);
                        }
                    }
    
                    return false;
                }
            </script>
    </telerik:RadCodeBlock>
    

    编辑1:(代码的其他部分)

    ASPX

            <telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
                <AjaxSettings>
                    <telerik:AjaxSetting AjaxControlID="RadGrid1">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="RadGrid1" LoadingPanelID="RadAjaxLoadingPanel1" />
                        </UpdatedControls>
                    </telerik:AjaxSetting>
                </AjaxSettings>
            </telerik:RadAjaxManager>
            <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server"></telerik:RadAjaxLoadingPanel>
            <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource"
                AllowFilteringByColumn="true" AllowMultiRowEdit="true">
                <MasterTableView CommandItemDisplay="Top" DataKeyNames="ID" EditMode="InPlace">
                    <Columns>
                        <telerik:GridBoundColumn DataField="ID" UniqueName="ID" HeaderText="ID"></telerik:GridBoundColumn>
                        <telerik:GridBoundColumn DataField="Name" UniqueName="Name" HeaderText="Name" HtmlEncode="true"></telerik:GridBoundColumn>
                        <telerik:GridEditCommandColumn></telerik:GridEditCommandColumn>
                    </Columns>
                </MasterTableView>
            </telerik:RadGrid>
            <asp:Button ID="Button1" runat="server" Text="Get Insert and Edit stauts" OnClientClick="return getEditInsertCount();" />
        </div>
    

    ASPX.CS

    protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
    {
        DataTable dt = new DataTable();
    
        dt.Columns.Add("ID", typeof(int));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Customdate", typeof(DateTime));
    
        dt.Rows.Add(1, "name1", DateTime.Now);
        dt.Rows.Add(2, "name2", DateTime.Now.AddYears(-1));
        dt.Rows.Add(3, "name3", DateTime.Now.AddYears(1));
    
        RadGrid1.DataSource = dt;
    }
    

    【讨论】:

    • 这段代码不行,内部调用get_masterTableView()会在get_id()上抛出空指针异常,猜测是因为我在服务器模式下编辑
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-20
    • 2010-12-03
    • 2018-12-30
    • 1970-01-01
    • 2021-10-28
    • 2015-05-21
    相关资源
    最近更新 更多