Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обновить страницу по приходу данных с другой? И как принять эти данные 
V
    Опции темы
LightVolk
Дата 6.8.2013, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 2.7.2013

Репутация: нет
Всего: нет



Здравствуйте!

Есть приложение, на главной странице кнопка, по нажатию вызывается popup окно (aspx страница) 
В ней обрабатываются данные и по нажатию на кнопку "Добавить" данные пишутся в базу.
Дальше мне нужно передать данные главной странице о том, что ей нужно перезагрузиться.

Как это сделать?

Я пробую вот так:

В PopUp странице после всех операций- по нажатию на кнопку:

Код

protected void ButtonAdd_Click(object sender, EventArgs e)
        {
           
    // добавляем новую запись в базу

                // пытаюсь отправить признак того,что главной странице нужно перезагрузиться
                Session["field1"] = "value1";
              
                
        }



На главной странице прием этих данных в Page_Load:

Код


 string str1=(string)(Page.Session["field1"]);
     
            if (str1 == "value1")
            {
                Page.Response.Redirect(Page.Request.Path);
                str1 = "";

            }


Нужно ли засовывать этот код в 
Код

   if (!Page.IsPostBack)
            {

           }

?

После отработки popup формы и ее закрытия ничего не происходит.
Если потом перезагрузить главную страницу, то str1=="value1".

Но как сделать так,чтобы страницу не нужно было перезагружать самому?

Спасибо.

Это сообщение отредактировал(а) LightVolk - 6.8.2013, 15:55
PM MAIL   Вверх
boevik
Дата 7.8.2013, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: нет
Всего: 35



Команду redirect надо поставить в функции buttonadd_click.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Kill_em_all
Дата 7.8.2013, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 2.4.2005

Репутация: нет
Всего: нет



После сохранения необходимо вызвать js 
Код

window.opener.location.href="адрес главной страницы";
window.close();

Это вызовет обновление главной и закрытие попап. Можно этот повесить на отдельную на отдельную не серверсайд кнопку или на OnClientClick кнопки ButtonAdd (в этом случае, если не ошибаюсь, необходимо и самому вызвать __doPostback() для постбэка)

Цитата

Нужно ли засовывать этот код в 

Код


   if (!Page.IsPostBack)
            {
           }


?


Нет. На главной постбэка не будет

Добавлено через 3 минуты и 26 секунд
Цитата(boevik @ 7.8.2013,  08:01)
Команду redirect надо поставить в функции buttonadd_click.

эта кнопка у него на странице в попап окне. Редирект произойдет в нем же
PM MAIL   Вверх
LightVolk
Дата 7.8.2013, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 2.7.2013

Репутация: нет
Всего: нет



Вероятно я делаю все неправильно...

Отказался от Session 

Теперь у меня так:

В родительском окне:

Код

 protected void Page_Load(object sender, EventArgs e)
        {

            if (!Page.IsPostBack)
            {


                dtRedactor = testProject5.Data.PersonReadWriteData.getAllPersons(connRedactor, queryRedactor);

              

                GridViewRedactorNames.DataSource = dtRedactor;
                GridViewRedactorNames.DataBind();

                ButtonAdd.Visible = true;
                ButtonDelete.Visible = true;
                dtRedactor.Clear();
               
            }
            else
            { //PostBack
                
                dtRedactor = testProject5.Data.PersonReadWriteData.getAllPersons(connRedactor, queryRedactor);
                GridViewRedactorNames.DataSource = dtRedactor;
                GridViewRedactorNames.DataBind();
                
            }

         //   dtRedactor.Clear();
         //   dtRedactor = testProject5.Data.PersonReadWriteData.getAllPersons(connRedactor, queryRedactor);
         //   GridViewRedactorNames.DataSource = dtRedactor;
         //   GridViewRedactorNames.DataBind();
       
           

        }



В дочернем окне:

Код

 protected void ButtonAdd_Click(object sender, EventArgs e)
        {
           
            dtOriginal = getAllPersons(connectionStringReadTable, filterQueryReadTable);
            
            if (ListBox.Items != null)
            {
                int ins = 0;
                int[] selectIndexes; selectIndexes = ListBox.GetSelectedIndices();
                Console.WriteLine(selectIndexes.Length);
                DataRow row;
                Console.WriteLine(selectIndexes+""+selectIndexes.Length);
                for (int i = 0; i < selectIndexes.Length; i++)
                {

                    row = getDataRowFromListItem(ListBox.Items[selectIndexes[i]], dtOriginal);
                   ins= setPersonRowsIntoDB(
                        connectionStringWriteTable, filterQueryWriteTable, row);
                   Console.WriteLine(ins);

                }
 
             
               
            //    HttpContext.Current.Response.Redirect(HttpContext.Current.Request.Url.ToString());
               Page.ClientScript.RegisterStartupScript(this.GetType(), "hi", 
                   "<script language=javascript>window.opener.location.reload(true);close();</script>");
           
            }
         
                
                
        }


Правда теперь страница перегружается предварительно спросив о том хотите ли вы послать повторно данные.

Плюс Checkbox не выделаяется как Checked==true  :
Код

  protected void ButtonDelete_Click(object sender, EventArgs e)
        {
           
             String Name="";
                  
                    foreach (GridViewRow row in GridViewRedactorNames.Rows)
                    {
                      
                        CheckBox cb = (CheckBox)row.FindControl("Person_Selector");
                 
                        if ((cb!=null)&&(cb.Checked))
                        {
                            try
                            {
                                Name = Convert.ToString(GridViewRedactorNames.DataKeys[row.RowIndex].Value);
                                Console.WriteLine(Name);
                                testProject5.Data.PersonReadWriteData.deletePersonRowsFromDB(
                               connRedactor, queryRedactor, Name);
                            
                            }
                            catch (ArgumentOutOfRangeException ex)
                            {
                                Console.WriteLine("Error in deleteRow" + ex);
                            }
                         

                        }
                        else {
                            Console.WriteLine("");
                        }
                    }
                    dtRedactor = testProject5.Data.PersonReadWriteData.getAllPersons(connRedactor, queryRedactor);
                    GridViewRedactorNames.DataSource = dtRedactor;
                    GridViewRedactorNames.DataBind();
           
        }


Сюда программа не доходит:                          Name = Convert.ToString(GridViewRedactorNames.DataKeys[row.RowIndex].Value);
Просто пропускает проверку if. Так как все checkbox =false.
Хотя я выделяю несколько checkbox-ов.

Код :
Код

<asp:GridView ID="GridViewRedactorNames" runat="server"   AllowSorting="true" OnRowDataBound="GridViewRedactorNames_RowDataBound"
     DataKeyNames ="Name"
      AutoGenerateColumns="true"   CellPadding="4" 
      EnableModelValidation ="True" ForeColor="#333333"
     OnSorting="GridViewRedactorNames_Sorting"
     GridLines="None"  Width="315px" >
    <AlternatingRowStyle BackColor="White" />
    <EditRowStyle BackColor="#2461BF" />
    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#EFF3FB" />
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
  
    <Columns>
        
        <asp:TemplateField HeaderText="">
           
             <ItemStyle Width="35%"></ItemStyle>
           
            <ItemTemplate>
                  <asp:CheckBox ID="Person_Selector" runat="server"  />
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox runat="server" ID="tbMan" Text=''></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>
    </Columns>
                                        
    
</asp:GridView>




Получается парадоксальная ситуация: Если убираю код в PostBack , то не работает добавление в родительском окне, зато работает удаление в дочернем.
Если оставляю код- то не работает удаление в дочернем ,  а добавление строк  в родительском окне работает!

Подскажите пожалуйста , что я делаю не так.

Это сообщение отредактировал(а) LightVolk - 7.8.2013, 14:11
PM MAIL   Вверх
LightVolk
Дата 7.8.2013, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 2.7.2013

Репутация: нет
Всего: нет



Так, проблема в том, что я перебиндиваю GridView и поэтому теряются все данные о нажатых checkbox-ах.
Как же тогда решить эту проблему?

Может использовать Session["isPopUp"]="true"; - при вызове кнопки в дочернем окне?
А в родительском -проверять это свойство ?
PM MAIL   Вверх
LightVolk
Дата 7.8.2013, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 19
Регистрация: 2.7.2013

Репутация: нет
Всего: нет



Получилось вот так:

В коде главной страницы:

Код

 protected void Page_Load(object sender, EventArgs e)
        {
            
            if (!Page.IsPostBack)
            {


                dtRedactor = testProject5.Data.PersonReadWriteData.getAllPersons(connRedactor, queryRedactor);
                

                GridViewRedactorNames.DataSource = dtRedactor;
                GridViewRedactorNames.DataBind();

                ButtonAdd.Visible = true;
                ButtonDelete.Visible = true;
                dtRedactor.Clear();
            
            }
            else
            { //PostBack


               
                String s = (String)Page.Session["isPopUp"];
                Console.WriteLine(s);
                if (s != null)
                {
                    if ("true" == s)
                    {
                        Page.Session["isPopUp"] = "false";
                        dtRedactor = testProject5.Data.PersonReadWriteData.getAllPersons(connRedactor, queryRedactor);
                        GridViewRedactorNames.DataSource = dtRedactor;
                        GridViewRedactorNames.DataBind();
                    }
                    else
                    {
                        
                    }
                }
                else
                {
                  
                }
            }


В результате все заработало...Надеюсь:)


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0809 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.