0

我的 main.aspx

    <ext:ResourceManager ID="ResourceManager1" runat="server" Theme="Gray" />
    <form id="form2" runat="server">
    <ext:Panel runat="server" ID="anaPanel" Title="OSO" Icon="Car">
        <TopBar>
            <ext:Toolbar runat="server" Layout="FitLayout">
                <Items>
                    <ext:Menu ID="Menu1" runat="server" Floating="false" Layout="HBoxLayout" ShowSeparator="false"
                        AnimCollapse="true" Cls="horizontal-menu">
                        <Defaults>
                            <ext:Parameter Name="MenuAlign" Value="tl-bl?" Mode="Value" />
                        </Defaults>
                        <Items>
                            <ext:MenuItem ID="MenuItem1" runat="server" Text="" Icon="Group">
                                <Menu>
                                    <ext:Menu ID="Menu2" runat="server">
                                        <Items>
                                            <ext:MenuItem Text="new card" Icon="GroupAdd">
                                           <DirectEvents>
                                           <Click OnEvent="AddNewCart_Click"></Click>
                                           </DirectEvents>

                                            </ext:MenuItem>
                                            ...............
                                            ...............
                                            </ext:Panel>

    </form>

我的 maninpage codebehind 是这样的。

 protected void AddNewCart_Click(object sender, DirectEventArgs e)
    {

        string path = "Pages/Kart.aspx";
        Window win = CreateWindows(MyWindow,Icon.Group,path,"new card", 420, 500);
        //  private Window CreateWindow(string Id, Icon ic, string path, string Title, int Heigh, int width){......};
       //I get the new Window and pass some values and turn it back.
        win.Render(this.Form);
        win.Show();
    }

在 Kart.aspx 内部还有一个按钮,当单击按钮时,加载第二个子页面与上面的代码相同,但更改了路径(假设加载 B.aspx)。我这样做就像 window.parent.App.direct.MethodName ()。*[在 main.aspx 中描述的 MethodName()] 但我需要刷新 Kart.aspx 内的网格,当来自 B.aspx 的新项目时,*我试图像这个 window.parent 一样到达 Kart.aspx 方法。 App.direct.MethodName() 但似乎不起作用。它只有在 main.aspx 代码隐藏中描述时才有效。一位朋友告诉我,这样做的唯一方法是使用 javascript" 像这样

代码隐藏

X.Call("ReloadGrid");

 function ReloadGrid() {
            var grid = window.parent.Ext.getCmp('GridId');
            //grid reloading code
}

但我不知道如何通过此脚本重新加载网格。或者有另一种方法可以做到这一点。谢谢

我的卡丁车.aspx;

<ext:GridPanel runat="server" ID="grid1" Title="" Height="460"
                Flex="1" Scroll="Vertical">
                <Store>
                    <ext:Store ID="strKart" runat="server">
                        <Model>
                            <ext:Model ID="Model1" runat="server" IDProperty="Id">
                                <Fields>
                                    <ext:ModelField Name="Id" />
                                    <ext:ModelField Name="name" />
                                    <ext:ModelField Name="surname" />


                                </Fields>
                            </ext:Model>
                        </Model>
                        <Listeners>
                            <Exception Handler="Ext.Msg.alert('Products - Load failed', operation.getError());" />
                        </Listeners>
                    </ext:Store>
                </Store>

及其背后的代码

 [DirectMethod]
        public void ReloadKart()
        {

            this.strKart.DataSource = cari_bll.GetAll();
            this.strKart.DataBind();
        }

**尝试从单击按钮的 B.aspx 运行 ReloadKart () 函数

4

1 回答 1

1

现在你有 3 个页面,父页面让我们称之为Parent.aspx,子页面 Kart.aspxb.aspx

并且您想根据b.aspx中的事件Kart.aspx中加载网格

由于您通过调用直接方法加载网格

    [DirectMethod]
    public void ReloadKart()
    {    
        this.strKart.DataSource = cari_bll.GetAll();
        this.strKart.DataBind();
    }

它归结为在Kart.aspx中调用此方法

为此,您需要执行以下操作:

  1. 在Kart.aspx中定义一个调用直接方法的 JavaScript 方法ReloadKart,我们将其命名为 ReloadGrid

    function ReloadGrid()
    {
        App.direct.ReloadKart();
    }
    
  2. 在Parent.aspx中定义此方法的委托,调用它ReloadGridDelegate,调用该委托CallKartReloadGrid的方法,以及设置它的方法SetReloadGridDelegate

    var ReloadGridDelegate;
    function CallKartReloadGrid()
    {
        ReloadGridDelegate();
    }
    function SetReloadGridDelegate(delegate)
    {
        ReloadGridDelegate = delegate;
    }
    
  3. Kart.aspx 中分配调用SetReloadGridDelegate

    window.parent.SetReloadGridDelegate(ReloadGrid);
    
  4. 最后在b.aspx中调用父方法

    window.parent.CallKartReloadGrid();
    
于 2013-07-17T09:52:23.963 回答