可以在Asp.net中将一个事件调用到另一个Evevnt中

时间:2013-11-28 08:04:16

标签: c# asp.net detailsview

我想把一个事件称为另一个事件......我们可以做这个任务......

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);
    }

如果有可能,则可以通过发件人和e

4 个答案:

答案 0 :(得分:2)

简单地写下您的事件名称和paas发件人,就像这样

DetailsView1_ModeChanging(发件人,E);

答案 1 :(得分: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);
}

将逻辑放入事件处理程序通常不是一种好的形式,特别是如果您计划稍后重用该功能,因为它限制您只在一个地方使用逻辑。

答案 2 :(得分:0)

我建议将DetailsView1_ModeChanging中存在的逻辑重构为私有方法,并从两个事件处理程序中调用新方法。

答案 3 :(得分: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);
}

通过这种方式,您可以更清楚地了解代码中发生了什么。隐含地调用事件是一个坏主意。