2012-02-16 6 views
-1

У меня есть сетка в asp.net, внутри asp.net Я привязываю данные как ссылку, когда нажимаю кнопку ссылки. Мне нужно вызвать метод в коде позади. вложенное событие не ворует в моем коде. как я могу это решить?Событие, привязанное к кнопке ссылки внутри gridview, не работает?

мой код похож, как это,

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      LinkButton link = new LinkButton(); 
      link.Text = e.Row.Cells[0].Text; 
      link.CommandArgument = "Hello"; 
      link.Click += new EventHandler(this.onLinkClick); 
      e.Row.Cells[0].Controls.Add(link); 
     } 

    } 

    protected void onLinkClick(object sender, EventArgs e) 
    { 
     LinkButton btn = (LinkButton)(sender); 
     string value = btn.CommandArgument; 
     TextBox1.Text=value; 
    } 
+0

«Не работает», как в «Не стрелять»? – Shai

+0

да не стрельба. – niknowj

ответ

1

Вы должны вызвать функцию, которая связывает источник в каждый раз GridView в загрузке страницы

экс.

protected void Page_Load(object sender, EventArgs e) 
{ 
    PopulateGridView(); 
} 
+0

сетка загружается должным образом, но событие, прикрепленное к данным gridview, не срабатывает – niknowj

+0

Я знаю это ... но когда страница Post Back ... события больше не привязаны к элементам управления .. вам нужно вызвать функции, которые связывает события с элементами управления каждый пост назад –

+0

@niknowj, что случилось, еще не стреляли? –

0

Handle RowCommand событие GridView для обработки «события» кнопок и вы добавляете LinkButton динамически, то данные Binding должны быть выполнены либо в Page_Init или Page_Load.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      LinkButton link = new LinkButton(); 
      link.Text = e.Row.Cells[0].Text; 
      link.CommandArgument = "Hello"; 
      e.Row.Cells[0].Controls.Add(link); 
     } 
    } 

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
    { 
     string value = e.CommandArgument.ToString(); 
     TextBox1.Text=value; 
    } 
1

Потому что нет логики для добавления кнопки ссылки (я думаю, вы должны добавить его для каждой записи), почему бы вам не добавить его во время разработки или нет?

<asp:GridView ID="GridView1" runat="server"> 
     .... 
    <ItemTemplate> 
      <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click">LinkButton</asp:LinkButton>    
    </ItemTemplate> 
    ...... 
    </asp:GridView> 

Убедитесь, что AutoEventWireup="true" на странице

+0

+1 для альтернативного решения использования встроенного "" –

0

Вам нужно подключить обработчик событий для динамического кнопки в случае RowCreated в GridView или он не срабатывает. Затем используйте «FindControl» в обработчике событий RowDataBound. Лично мне совсем не нравится эта модель, но иногда она неизбежна.

Вы должны использовать GridView's <asp:ButtonField> с событием RowCommand в сетке. Таким образом, вы не создаете динамический контроль и не подключаете события.

Here's an article on how to use it.

Смежные вопросы