Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > как добавить кнопку в edit ячейку datagrid'а?


Автор: semi 22.5.2007, 20:58
собственно вопрос в теме... делала так:

Код

  public Button but1 = new Button();    
...
  protected void grid_item_data_bound (object sender, DataGridItemEventArgs e)
{
  if (e.Item.ItemType.ToString() == "EditItem")
    {          but1.ID = "Button";
        but1.Text = "?";
        e.Item.Cells[4].Controls.Add(but1);
    }
private void InitializeComponent()
    {
                this.but1.Click += new System.EventHandler(this.but1_click);
    }
private void but1_click(object sender, System.EventArgs e)
        {...}
}

когда нажимаешь кнопку "редактировать" в datagrid, то в ячейке появляется but1. НО! когда нажимаешь but1, вместо того, чтобы выполнять but1_click она исчезает :(

help!!! как добавить кнопку, чтоб она не исчезала?

Автор: Mymik 23.5.2007, 09:03
проблема заключается в том, что при PostBack данных на сервер, динамически сконфигурированные данные не сохраняются.
Потому их надо либо перегенерировать по новой, либо делать вызов их обработчиков с помощью, к примеру, Page.GetPostBackClientEvent
Т.е. когда ты создаешь кнопку, ты ее добавила в 8 строчке кода (приведенного выше) и после этого ты дописываешь еще что-то типа 
Код

btn1.Attributes.Add("onclick", Page.GetPostBackClientEvent(btn1, "Clicked"));

А потом в Page_Load ты смотришь по Request.Form["__EVENTTARGET"] кто отправил запрос, а по Request.Form["__EVENTARGUMENT"], что в этом запросе было передано.

Автор: semi 23.5.2007, 10:50
Цитата(Mymik @  23.5.2007,  09:03 Найти цитируемый пост)
А потом в Page_Load ты смотришь по Request.Form["__EVENTTARGET"] кто отправил запрос, а по Request.Form["__EVENTARGUMENT"], что в этом запросе было передано. 

можно про это поподробнее?

Цитата(Mymik @  23.5.2007,  09:03 Найти цитируемый пост)

Код

btn1.Attributes.Add("onclick", Page.GetPostBackClientEvent(btn1, "Clicked"));


я так понимаю Clicked должна быть функция js?

Автор: semi 23.5.2007, 12:24
Mymik, спасибо огромное!

вот что получилось (надеюсь все правильно поняла smile если нет - скажи) :
Код

    private void Page_Load(object sender, System.EventArgs e)
        {
            if (!IsPostBack)
            {...}        
            else
            {
                if (Request.Form["__EVENTARGUMENT"]=="js_click")
                {
                    but1.ID = "Button";
                    but1.Text = "?";
                    DataGrid_t.Items[DataGrid_t.EditItemIndex].Cells[4].Controls.Add(but1);                    
                }
            }
        }        
        protected void grid_item_data_bound (object sender, DataGridItemEventArgs e)
                {
                   if (e.Item.ItemType.ToString() == "EditItem")
                       {          but1.ID = "Button";
                                   but1.Text = "?";
                                   e.Item.Cells[4].Controls.Add(but1);
                                   but1.Attributes.Add("onmouseup", Page.GetPostBackClientEvent(but1, "js_click"));
                   but1.Attributes.Add("onclick", "getPageWithData()"); // js функция
                       }
                 }

Автор: Mymik 23.5.2007, 18:22
Цитата(semi @  23.5.2007,  12:24 Найти цитируемый пост)
вот что получилось (надеюсь все правильно поняла smile если нет - скажи) :

А что тебе нужно было ???  smile я просто не знаю... я думал, что тебе нужно вызвать метод какой-то... ну так я предложил тебе JS вариант как вызывать метод... т.е. в той ситуации когда IsPostBack ты просто будешь искусственно возбуждать событие клика...
А у тебя сейчас... просто стоит добавление элемента... и все...  smile 

Цитата(semi @  23.5.2007,  10:50 Найти цитируемый пост)

я так понимаю Clicked должна быть функция js? 

Такого события нет. Советую хотя бы в первом приближении ознакомиться с событиями JS -->> http://www.quirksmode.org/js/events_compinfo.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)