Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / еще раз про AJAX / 4 сообщений из 4, страница 1 из 1
16.10.2006, 16:12
    #34057698
parapet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
еще раз про AJAX
есть следующая страница:


                <atlas:UpdatePanel Mode="Conditional" runat="server" ID="upGrid">
                    <ContentTemplate>
                        <asp:GridView runat="server" ID="gv" DataSourceID="InventoryDataSource" AutoGenerateColumns="false" DataKeyNames="Id" OnRowDataBound="gv_RowDataBound" OnRowUpdating="gv_RowUpdating">
                            <Columns>
                                <asp:TemplateField HeaderText="Community">
                                    <ItemTemplate>
                                        <asp:Label runat="server" ID="lblCommunity"></asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <asp:DropDownList runat="server" ID="ddlCommunity"></asp:DropDownList>
                                    </EditItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Model #">
                                    <ItemTemplate>
                                        <asp:Label runat="server" ID="lblModel"></asp:Label>
                                    </ItemTemplate>
                                    <EditItemTemplate>
                                        <atlas:UpdatePanel runat="server" Mode="Conditional" ID="upGridListing">
                                            <ContentTemplate>
                                                <asp:DropDownList runat="server" ID="ddlListings"></asp:DropDownList>
                                            </ContentTemplate>
                                        </atlas:UpdatePanel>
                                    </EditItemTemplate>
                                </asp:TemplateField>
                                <asp:CommandField ButtonType="Image" ShowEditButton="true" ShowDeleteButton="true" EditImageUrl="~/images/icons/icon_edit.gif" DeleteImageUrl="~/images/icons/icon_delete.gif" CancelImageUrl="~/images/icons/icon_stop.gif" UpdateImageUrl="~/images/icons/icon_edit.gif" />
                                <asp:TemplateField>
                                    <ItemTemplate>
                                        <asp:Button runat="Server" ID="btnRefreshUpGridListing" />
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>
                    </ContentTemplate>
                </atlas:UpdatePanel>

мне нужно — когда какая-либо строка в режиме редактирования и при смене значения ddlCommunity перебиндить ddlListings (без перегрузки страницы естественно). Для этого в gv_RowDataBound


        if ((e.Row.RowState & DataControlRowState.Edit) != 0)
        {
            DropDownList ddlCommunity = (DropDownList)e.Row.FindControl("ddlCommunity");
            DropDownList ddlListings = (DropDownList)e.Row.FindControl("ddlListings");

                         // это мы биндим community
                        BindCommunityList(ref ddlCommunity, inventories[e.Row.RowIndex].Id_community);
                         // это мы биндим listings для данного community
            BindModelList(ref ddlListings, inventories[e.Row.RowIndex].Id_community, inventories[e.Row.RowIndex].Id_listing);

                         // регистрируем client callback
            string ddlCommunityClientScript = this.ClientScript.GetCallbackEventReference(this, 
                "'ddlCommunity' + ';" + e.Row.RowIndex.ToString() +  "' + ';' + document.all['" + ddlCommunity.ClientID + "'].selectedIndex", 
                "ddlCommunityCallback", "'CallbackContext'", "null", true);
            ddlCommunity.Attributes.Add("onchange", ddlCommunityClientScript);

                         // эту кнопку вешаем как триггер для upGridListing, что будет обновлять ddlListings
            Button btnRefreshUpGridListing = (Button)e.Row.FindControl("btnRefreshUpGridListing");
            Microsoft.Web.UI.ControlEventTrigger triggerbtnRefreshUpGridListing = new Microsoft.Web.UI.ControlEventTrigger();
            triggerbtnRefreshUpGridListing.ControlID = btnRefreshUpGridListing.ClientID;
            triggerbtnRefreshUpGridListing.EventName = "Click";

            Microsoft.Web.UI.UpdatePanel upGridListing = (Microsoft.Web.UI.UpdatePanel)e.Row.FindControl("upGridListing");
            upGridListing.Triggers.Add(triggerbtnRefreshUpGridListing);
        }

и


    public void RaiseCallbackEvent(string eventArgument)
    {
        string[] arr = eventArgument.Split(';');
        switch(arr[0])
        {
            case "ddlCommunity":
                int id_row = int.Parse(arr[1]); // id строки, которая редактируется
                int id_selected_index = int.Parse(arr[2]); // выбранный индекс ddlCommunity
                DropDownList ddlListings = (DropDownList)gv.Rows[id_row].FindControl("ddlListings"); // ищем наш ddlListings

                                // перебиндиваем ddlListings для нового community
                BindModelList(ref ddlListings, ArmGAC.Community.AllCommunitiesWhatMustBeDisplayOnContactPage()[id_selected_index].Id, 0);
                break;
        }
    }

как оно предполагается работать — когда строка в режиме редактирования и меняется значение ddlCommunity — инициируется обратный вызов, в аргумент которого заносится id строки и индекс выбранного нового community, после чего перебиндивается ddlListings (а это происходит, проверял в дебаггере) и по нажатию кнопки btnRefreshUpGridListing для данной строки обновляется upGridListing. Но почему-то при нажатии btnRefreshUpGridListing не меняется список ddlListings (показывается старый). Почему?

спасибо... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
...
Рейтинг: 0 / 0
18.10.2006, 23:37
    #34065214
mogadanez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
еще раз про AJAX
Здравствуйте, parapet, Вы писали:

P>как оно предполагается работать — когда строка в режиме редактирования и меняется значение ddlCommunity — инициируется обратный вызов, в аргумент которого заносится id строки и индекс выбранного нового community, после чего перебиндивается ddlListings (а это происходит, проверял в дебаггере) и по нажатию кнопки btnRefreshUpGridListing для данной строки обновляется upGridListing. Но почему-то при нажатии btnRefreshUpGridListing не меняется список ddlListings (показывается старый). Почему?

А ты попробуй, повесь обработчик на кнопку рефреш


protected void Click_Refresh(object sender, EventArgs e)
    {
        Control c =((Control) sender).NamingContainer.FindControl("ddlListings");
    }
и посмотри на содержимое твоего дропдауна — она старое будет.

твоя задача у меня решилась ( правда автоматическим рефрешем а не по кнопке ) с помощью установки первому дропдауну AutoPostBack=true и в его обработчике OnSelected indexChanged перебиндиванием второго
...
Рейтинг: 0 / 0
19.10.2006, 12:49
    #34066242
parapet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
еще раз про AJAX
да, оказалось все гораздо проще. Большое спасибо :up:... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
...
Рейтинг: 0 / 0
19.10.2006, 14:04
    #34066661
mogadanez
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
еще раз про AJAX
Здравствуйте, parapet, Вы писали:

P>да, оказалось все гораздо проще. Большое спасибо :up:

плюс, еще можно использовать CascadingDropDown... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / еще раз про AJAX / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]