radgrid -get服务器在客户端编辑行

时间:2013-10-16 14:08:22

标签: javascript jquery asp.net telerik radgrid

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

我发现了一些关于如何使用的解释:get_masterTableView

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

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

谢谢, 奥马尔

2 个答案:

答案 0 :(得分:1)

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

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

就是这样。

答案 1 :(得分:1)

请尝试使用以下代码段。

<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;
}