我希望有一个座位表,可点击的ImageButtons显示座位是否被拍摄 问题是,行/列的数量取决于所选的剧院。
到目前为止,我有一个DataTable填充0表示空座位,1表示座位 这个DataTable根据剧院的行/列进行填充,然后通过Access表格放置1个所有座位(票证)。
我找到了两种显示此DataTable的方法:
一个GridView, AutoGenerateColumns =“true”
这个问题是它在我想要ImageButtons时自动生成纯文本。
一个表格控件,在Page_Load上我使用循环创建它并用ImageButtons填充它的单元格
这里的问题是ImageButtons(显示正确的图像)不响应点击,因为我无法调用ImageButton1_OnClick等,并且使用CommandName也没有显示任何结果。
填充表格控件的代码:
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事件(我还需要知道点击按钮的行/列)
或
我可以更改AutoGenerateColumns使用ImageButtons而不是文本创建列(如果不可能,有没有办法在“Page_Load”上“自动”生成我自己的列?)
答案 0 :(得分:0)
我会
DataTable.Columns
集合,ImageField
对象ImageField
添加到您的GridView.Columns
集合。DataTable
绑定到GridView
。以下是一些示例代码:
protected void Page_Load(object sender, EventArgs e)
{
DataTable tbl = generateTable(); // A table of 1's an 0's
foreach (DataColumn col in tbl.Columns)
{
ImageField img = new ImageField();
img.DataImageUrlField = col.ColumnName;
// I have 2 images in my "/Images" folder, 1.jpg and 0.jpg.
img.DataImageUrlFormatString = "/Images/{0}.jpg";
GridView1.Columns.Add(img);
}
GridView1.DataSource = tbl;
GridView1.DataBind();
}
唯一需要注意的是,它取决于具有ColumnName的DataTable
列。它可以是任何东西(在这个样本中,我的只是整数)。这样,您就可以使用数据绑定将ImageField
绑定到DataTable
列。
作为参考,这是我用来生成表的代码
// Generates a 10 x 10 table of 1's and 0's
public DataTable generateTable()
{
DataTable tbl = new DataTable("seats");
for (int i = 0; i < 10; i++)
{
tbl.Columns.Add(i.ToString());
}
Random rand = new Random();
for(int i = 0; i < 10; i++)
{
DataRow row = tbl.NewRow();
for (int j = 0; j < 10; j++)
{
row[j] = rand.Next(10) > 5 ? 0 : 1;
}
tbl.Rows.Add(row);
}
return tbl;
}