2014-02-12 2 views
0

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

protected void Update(object sender, GridViewPageEventArgs e) 
{ 
    //do some updates here 
} 

я даже попытался это, но не работает, пожалуйста, помогите

update(null,null); 

ответ

2

Что об этом ....

Создание функции

doSomeUpdateHere() 
{ 
    //do some updates here 
} 

Используйте его в случае кнопки

protected void Update(object sender, GridViewPageEventArgs e) 
{ 
    doSomeUpdateHere(); 
} 

использовать снова

doSomeUpdateHere(); 
+0

Я не следую вашему коду, я пытаюсь вызвать Update() – moe

+2

, моя точка помещает логику в функцию, чтобы вы могли ее повторно использовать, разве это не ваша проблема? – meda

0

Вы можете просто вызвать обработчик события:

Update(this, new GridViewPageEventArgs()); 

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

Однако, вы можете попытаться имитировать поведение баттона, скажем, с помощью

GridViewPageEventArgs e = new GridViewPageEventArgs(); 
e.NewPageIndex = 2; 
Update(GridView1, e); 
1

Вы имеете неправильный случай «и» в вашем «update(null, null);» вызова. Ваш подход прекрасен до тех пор, пока вы не используете sender и e внутри Update, и вы вызываете Update из метода одного и того же класса страниц.

0

Не делайте «поддельное» событие, позвонив по телефону Update(null, null). Это плохо по нескольким причинам:

  1. Если вы когда-нибудь решите использовать параметры события (object sender или GridViewPageEventArgs e), то ваш «фальшивый» вызов проходит null значения, скорее всего, взрывают.
  2. Парадигма «click event» в ASP.NET на самом деле представляет собой реализацию шаблона проектирования Observer, который в основном говорит, что я хочу иметь единую логику, которая выполняется при изменении состояния зависимого объекта. Другими словами, вы можете иметь пять кнопок на странице, которые имеют одну и ту же логику событий клика. Использование вашего кода Update(null, null) нарушит намерение шаблона Observer.
  3. Ввод логики реализации в код обработчика событий клика почти всегда является плохим идеей, поскольку он делает код менее многоразовым, поскольку вам необходимо передать «поддельные» значения для определенных сценариев. Вообще говоря, ваш код обработчика событий клика должен вызывать один или несколько методов, которые выполняют различную работу.
  4. Не отделяя логику реализации от отдельных методов, логика намного менее подвержена тестированию, так как логика теперь зависит от большего, чем она должна (GridView в вашем случае).

Я предлагаю вам сделать следующее:

protected void DoSomeUpdateHere() 
{ 
    // Do your table logic here 

} 

Теперь вы можете вызвать этот метод DoSomeUpdateHere() из любой точки в пределах вашего кода-за класса (т.е. Page_Load событий, другими методами, и т.д.).

Примечание: поскольку оно равно protected, оно по-прежнему доступно элементами управления ASP.NET в разметке, но не за пределами самой страницы.

0

Попробуйте

protected void txtModalPosition_TextChanged(object sender, EventArgs e) 
{ 
     Update(sender,e); 

} 

protected void Update(object sender, GridViewPageEventArgs e) 
{ 
    //do some updates here 
} 

Или со страницы Load вы можете также вызвать, передав аргумент

protected void Page_Load(object sender, EventArgs e) 
{ 
    Update(sender,e);   
} 

При необходимости вы также можете набрать актер EventArgs к другим классам, которые наследуют его.

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