Контекст: мне нужно создать 4 страницы, где мне нужно будет создать 2 таблицы для каждой страницы. Каждая таблица имеет одинаковую структуру, и единственное изменение - на загружаемые данные.Использование делегата с событиями
Я сделал что-то подобное для другой страницы, где мне приходилось делать 6 похожих таблиц на странице. Я использовал делегат для функций, которые дают разные данные, и передаю функцию, необходимую для моей функции TableInit. Это работает хорошо ! :)
Но теперь я собираюсь сделать статический класс, где я буду использовать всю свою функцию генератора таблиц, чтобы можно было ставить таблицы на странице с отдельными страницами без необходимости скопировать всю функцию.
Проблема в том, что у меня есть кнопка где-то в таблице и что я исправляю событие, расположенное на странице.aspx на этой кнопке. И когда я помещаю свою функцию в другой статический класс, я просто не могу найти способ передать свое событие.
Я вставляю здесь свой начальный код со всем на странице с этим вопросом: как вы изолируете функцию генератора таблиц со страницы?
namespace Pointage
{
public delegate List<M_FICHE> delOnGetRecent(M_USER_POINTAGE p_user);
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
tableInit(this.recentFicheDataTableHead, this.recentFicheDataTableBody, M_FICHE.getFiveRecentUserFiche);
tableInit(this.recentFicheNeededCorrectDataTableHead, this.recentFicheNeededCorrectDataTableBody, M_FICHE.getFiveRecentUserFicheWithNeededCorrections);
tableInit(this.recentFicheNeedApprovalDataTableHead, this.recentFicheNeedApprovalDataTableBody, M_FICHE.getFiveRecentUserFicheWithNeededApproval);
tableInit(this.recentFicheNeededValidDataTableHead, this.recentFicheNeededValidDataTableBody, M_FICHE.getFiveRecentUserFicheWithNeededValidation);
tableInit(this.recentErrorFicheDataTableHead, this.recentErrorFicheDataTableBody, M_FICHE.getFiveRecentErrorFiche);
langInit();
}
//procédure d'initialisation des différents label prenant compte de la langue
private void langInit()
{
// Useless for this problem
}
/// <summary> Table init. </summary>
///
/// <remarks> G 0669144, 26/10/2016. </remarks>
///
/// <param name="p_head"> The head. </param>
/// <param name="p_body"> The body. </param>
/// <param name="p_delOnGetRecent"> The delete on get recent method from M_FICHE. </param>
/// <param name="p_link"> The link. </param>
private void tableInit(HtmlGenericControl p_head, HtmlGenericControl p_body, delOnGetRecent p_delOnGetRecent)
{
List<M_FICHE> _listFiche = p_delOnGetRecent(new M_USER_POINTAGE(Convert.ToInt32(Session["id"])));
if (_listFiche.Count == 0)
{
p_head.Controls.Clear();
HtmlTableRow _row = new HtmlTableRow();
HtmlTableCell _cell = new HtmlTableCell();
_cell.InnerText = Resource.NO_RECENT_FICHE;
_row.Controls.Add(_cell);
p_head.Controls.Add(_row);
}
else
{
// HIDED CODE : creating thead code
p_body.Controls.Clear();
foreach (M_FICHE fiche in _listFiche)
{
//Création de la ligne du tableau
HtmlTableRow _row = new HtmlTableRow();
//Création de chaque cellules
HtmlTableCell cell = new HtmlTableCell();
M_USER_POINTAGE _user = M_USER_POINTAGE.getUserFromSGID(fiche.USER_SGID);
cell.InnerText = String.Format("{0}. {1}", _user.NAME[0], _user.FIRSTNAME);
_row.Controls.Add(cell);
//Cellule data
HtmlTableCell cell2 = new HtmlTableCell();
cell2.InnerText = fiche.DATE_CREATE.ToShortDateString();
_row.Controls.Add(cell2);
//Cellule status
HtmlTableCell cell3 = new HtmlTableCell();
cell3.InnerText = StatusManager.getRessource((STATUS)fiche.STATUT);
_row.Controls.Add(cell3);
//cellule action
HtmlTableCell cell4 = new HtmlTableCell();
//Ajout du bouton
HtmlButton _button = new HtmlButton();
_button.Attributes.Add("class", "btn btn-default");
_button.InnerText = Resource.BTN_ACCESS_CARD;
// HERE IS THE PROBLEM
_button.ServerClick += _buttonAccess_ServerClick;
//bind on button
cell4.Controls.Add(_button);
_row.Controls.Add(cell4);
p_body.Controls.Add(_row);
}
}
}
private void _buttonAccess_ServerClick(object sender, EventArgs e)
{
}
Это не то, о чем я думал вообще, но это тоже очень интересно, спасибо :) Я посмотрю на это :) –