2013-11-28 20 views
0

我想打电话给一个事件到另一个事件......我们可以做这个任务......是否可以调用一个事件到另一个Evevnt在Asp.net

protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e) 
    { 
     DetailsView1.ChangeMode(e.NewMode); 
     DetailsView1.DataSource = GetDetails.GetEmpDetailsById(Convert.ToInt32(Session["empId"])); 
     DetailsView1.DataBind(); 
    } 



protected void btnEdit_Click(object sender, EventArgs e) 
{ 

} 

我只是想打电话给DetailsView1_ModeChanging事件成btnEdit_Click就像下面

protected void btnEdit_Click(object sender, EventArgs e) 
    { 
     DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e); 
    } 

如果可能的话上面一个人如何可以通过发件人和电子邮件

+1

你试图达到的是非常丑陋的...... – giammin

回答

1

你应该从DetailsView1_ModeChanging提取逻辑到另一个会见例如,

private void ChangeDataSourceMode(DetailsViewMode newMode) { 
    DetailsView1.ChangeMode(newMode); 
    DetailsView1.DataSource = GetDetails.GetEmpDetailsById(Convert.ToInt32(Session["empId"])); 
    DetailsView1.DataBind(); 
} 

protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e) { 
    ChangeDataSourceMode(e.NewMode); 
} 

protected void btnEdit_Click(object sender, EventArgs e) { 
    ChangeDataSourceMode(DetailsViewMode.Edit); 
} 

这通常不是好的形式把逻辑到您的事件处理程序,特别是如果你打算以后再使用的功能,因为它你只使用在一个地方的逻辑限制。

0

我建议重构本逻辑DetailsView1_ModeChanging到一个私有方法,并从两个事件处理程序调用的新方法。

0

不要这样做。将您的事件代码提取到新方法中并调用它。

private void SetDetailsViewSource(DetailsViewMode mode) 
{ 
    DetailsView1.ChangeMode(mode); 
    DetailsView1.DataSource = GetDetails.GetEmpDetailsById(Convert.ToInt32(Session["empId"])); 
    DetailsView1.DataBind(); 
} 

ADN再由这两个事件称之为:

protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e) 
{ 
    SetDetailsViewSource(e.NewMode); 
} 

protected void btnEdit_Click(object sender, EventArgs e) 
{ 
    SetDetailsViewSource(DetailsViewMode.ReadOnly); 
} 

通过这种方式,更清晰什么是你的代码怎么回事。隐含地调用事件是一个糟糕的主意。

2

简单的写你的事件名称和PaaS发件人,E这样

DetailsView1_ModeChanging(发件人,E);

相关问题