Я хочу иметь таблицу рассадки с кликабельными кнопками ImageButton, показывающими, занято ли место.
Дело в том, что количество строк / столбцов зависит от выбранного театра.
Пока у меня есть DataTable, заполненный 0 для свободных мест и 1 для занятых.
Этот DataTable заполняется в соответствии со строками / столбцами театра, а затем 1 помещаются в таблицу доступа со всеми занятыми местами (билетами).
Я нашел два способа показать эту таблицу данных:
GridView с AutoGenerateColumns = "true"
Проблема с этим заключается в том, что он автоматически генерирует в виде простого текста, в то время как я хочу ImageButtons.
Элемент управления Table, а в Page_Load я создаю его с помощью циклов и заполняю его ячейки кнопками ImageButtons
Проблема в том, что кнопки ImageButton (при отображении правильного изображения) не реагируют на щелчки, поскольку я не могу вызвать ImageButton1_OnClick и т.п., а использование CommandName также не показало результатов.
Код, заполняющий элемент управления Table:
protected void Page_Load(object sender, EventArgs e)
{
Showing show = (Showing)Session["show"];
DataTable dt = DB.GetShowingSeats(show); //gets a table filled with 0's and 1's
foreach (DataRow row in dt.Rows)
{
TableRow Trow = new TableRow();
foreach (DataColumn col in dt.Columns)
{
TableCell Tcell = new TableCell();
ImageButton btn = new ImageButton();
btn.CommandName = "btnClick"; //doesn't work
btn.OnClientClick = "btn_Click"; //also doesn't work
if ((string)row[col] == "0")
{
btn.ImageUrl = "~/images/empty.png";
}
else
{
btn.ImageUrl = "~/images/taken.png";
btn.Enabled = false;
}
Tcell.Controls.Add(btn);
Trow.Cells.Add(Tcell);
}
this.tableSeats.Rows.Add(Trow);
}
}
Так что, в принципе, либо те или иные кнопки в таблице имеют событие OnClick (а также мне нужно знать строку / столбец нажатой кнопки)
OR
Я могу изменить AutoGenerateColumns сделать столбцы с ImageButtons вместо текста (если это невозможно, есть ли способ, которым я могу «автоматически» генерировать свои собственные столбцы на Page_Load?)