2012-06-29 13 views
0

У меня есть вид сетки на моей главной странице, и я показываю некоторые данные для пользователя (с использованием метода BindGrid). Этот вид сетки имеет несколько командных кнопок для каждой строки, которые выполняют некоторую операцию, например, Update. когда пользователь нажимает кнопку обновления, я показываю ему/ей пользовательский элемент управления для обновления значений. И когда пользователь нажимает на обновление, я хочу привязать сетку к новым данным (я хочу, чтобы называть BindGrid для новых данных). Как я могу это сделать и вызвать метод на главной странице с пользовательского элемента управления?Обновление главной страницы из пользовательского элемента управления

Edit 1)

Я написал этот код для пользовательского элемента управления:

public partial class SomeUserControl : System.Web.UI.UserControl 
{ 
public event EventHandler StatusUpdated; 

private void FunctionThatRaisesEvent() 
{ 
    if (this.StatusUpdated != null) 
     this.StatusUpdated(new object(), new EventArgs()); 
} 


public void Page_Load(object sender, EventArgs e) 
{ 
    //.... 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    FunctionThatRaisesEvent(); 
} 
} 

и конструктор для пользовательского элемента управления:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="SomeUserControl.ascx.cs" Inherits="SomeUserControl" %> 
<asp:Button ID="Button1" runat="server" Text="Update" Height="70px" 
onclick="Button1_Click" Width="183px" /> 

и добавьте этот код для главной страницы:

protected void Page_Load(object sender, EventArgs e) 
{ 

} 
protected void Unnamed1_Click(object sender, EventArgs e) 
{ 
    SomeUserControl userControl = (SomeUserControl)LoadControl("SomeUserControl.ascx"); 
    userControl.StatusUpdated += new EventHandler(userControl_StatusUpdated); 
    Panel1.Controls.Add(userControl); 
} 

void userControl_StatusUpdated(object sender, EventArgs e) 
{ 
    GetDate(); 
} 

private void GetDate() 
{ 
    TextBox1.Text = DateTime.Today.ToString(); 
} 

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

<%@ Register src="SomeUserControl.ascx" tagname="SomeUserControl" tagprefix="uc1" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <div> 
     <asp:UpdatePanel ID="upd1" runat="server" UpdateMode="Conditional"> 
      <ContentTemplate> 
       <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
       <asp:Button runat="server" Text="Add User Control" Height="44px" ID="Nims" 
       onclick="Unnamed1_Click" Width="133px" /> 
       <asp:Panel ID="Panel1" runat="server" BackColor="#FFFFCC"></asp:Panel> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 

    </form> 
</body> 
</html> 

но это не работает, и ничего случилось. даже я добавляю точку останова для кода кнопки управления кликом, но кажется, что событие не поднимается.

ответ

1

Поднять событие из пользовательского элемента управления и обработать событие с главной страницы. Выезд this question.

// ** EDIT ** //

Вы добавляете пользовательский элемент управления динамически на кнопку мыши. Когда вы нажмете кнопку в своем пользовательском элементе управления, она сначала инициирует обратную передачу на главной странице - теперь ваш пользовательский контроль больше не существует (поэтому событие не поднимается). Если вы измените свой главный дизайнер страницы, чтобы выглядеть следующим образом:

<%@ Register Src="SomeUserControl.ascx" tagname="SomeUserControl" tagprefix="uc1" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head id="Head1" runat="server"> 
    <title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 
<div> 
    <asp:UpdatePanel ID="upd1" runat="server" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
      <asp:Button runat="server" Text="Add User Control" Height="44px" ID="Nims" 
      onclick="Unnamed1_Click" Width="133px" /> 
      <asp:Panel ID="Panel1" runat="server" BackColor="#FFFFCC"> 
      <uc1:SomeUserControl ID="userControl" runat="server" /> 
      </asp:Panel> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 

</form> 

и код-позади, чтобы выглядеть следующим образом

protected void Page_Load(object sender, EventArgs e) 
{ 
    userControl.StatusUpdated += new EventHandler(userControl_StatusUpdated); 
} 

void userControl_StatusUpdated(object sender, EventArgs e) 
{ 
    GetDate(); 
} 

private void GetDate() 
{ 
    TextBox1.Text = DateTime.Today.ToString(); 
} 

вы увидите, что я имею в виду. Попробуйте установить точки останова на событиях загрузки страницы на главной странице и пользовательском элементе управления, чтобы точно увидеть порядок, в котором происходят события.

+0

см. Редактировать 1 – Arian

+0

Ответ отредактирован ... – Goose

0

Вы можете зарегистрировать событие в своем пользовательском элементе управления, поднять событие, когда пользователь нажимает кнопку обновления и фиксирует это событие на странице.

http://codebetter.com/brendantompkins/2004/10/06/easily-raise-events-from-asp-net-ascx-user-controls/

+0

см. Редактировать 1 – Arian

0

вам нужно использовать обработчик событий для этого

определить обработчик событий на странице ASCX

public event EventHandler ButtonClickDemo; 

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

ButtonClickDemo(sender, e); 

в странице использовании родительского следующие

protected void Page_Load(object sender, EventArgs e) 
    { 
     btnDemno.ButtonClickDemo += new EventHandler(btn_Click); 
    } 

функция для привязки сетки родительской страницы

protected void btn_Click(object sender, EventArgs e) 
    { 
      BindGrid(); 
    } 

выше кода будет вызывать функцию BindGrid родительской страницы.

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