バックエンドとしてプログラムでボタンASP.NET
を追加しようとしています。C#
ボタンを表示することはできますが、ユーザーがボタンをクリックしても RowCommand が起動されません。
問題は、ユーザーが「送信」ボタンをクリックした後にボタンを作成していることだと思います。page_load でボタンを作成すると、RowCommand が機能します。
ウェブサイトの流れは次のとおりです。
- ページの読み込み: 基本データを表示します。
- ユーザーが [送信] ボタンをクリックすると、 が作成され、 が作成され
GridView
ますButtonField
。GridView
と の両方がButtonField
バックエンドで動的に作成されます。 - 次に、ユーザーが生成されたボタンをクリックすると、
RowCommand
コードは次のとおりです。
Page_load
protected void Page_Load(object sender, EventArgs e)
{
//Nothing because we only want to create the button after the user
//clicks on submit
}
randomGridView
Gridviews とボタンを生成します
public void randomGridView(Table t, int x)
{
GridView gv1 = new GridView();
GridView gv2 = new GridView();
GridView gv3 = new GridView();
GridView gv4 = new GridView();
TableRow r = new TableRow();
for (int i = 0; i < x; i++)
{
TableCell c = new TableCell();
c.BorderStyle = BorderStyle.Solid;
if (i == 0)
{
c.Controls.Add(gv1);
}
if (i == 1)
{
c.Controls.Add(gv2);
}
if (i == 2)
{
c.Controls.Add(gv3);
}
if (i == 3)
{
c.Controls.Add(gv4);
}
r.Cells.Add(c);
}
t.Rows.Add(r);
//Where the xml gets bonded to the data grid
XmlDataSource xds = new XmlDataSource();
xds.Data = xml;
xds.DataBind();
xds.EnableCaching = false;
gv1.DataSource = xds;
ButtonField temp = new ButtonField();
temp.ButtonType = ButtonType.Image;
temp.ImageUrl = "~/checkdailyinventory.bmp";
temp.CommandName = "buttonClicked";
temp.HeaderText = " ";
gv1.Columns.Add(temp);
gv1.RowCommand += new GridViewCommandEventHandler(CustomersGridView_RowCommand);
gv1.RowDataBound += new GridViewRowEventHandler(inventoryGridView_RowDataBound);
gv1.DataBind();
xds.Data = xml;
xds.DataBind();
xds.EnableCaching = false;
gv2.DataSource = xds;
gv2.DataBind();
xds.Data = xml;
xds.DataBind();
xds.EnableCaching = false;
gv3.DataSource = xds;
gv3.DataBind();
xds.Data = xml;
xds.DataBind();
xds.EnableCaching = false;
gv4.DataSource = xds;
gv4.DataBind();
}
inventoryGridView_RowDataBound
最初のセルに手動でボタンを追加しようとした場所
public void inventoryGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
Button temp = new Button();
temp.CommandName = "buttonClicked";
temp.Text = "temp button!";
e.Row.Cells[0].Controls.Add(temp);
}
CustomersGridView_RowCommand
これは解雇する必要があるものです
public void CustomersGridView_RowCommand(Object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "buttonClicked")
{
int index = Convert.ToInt32(e.CommandArgument);
Label1.Text = index.ToString();
}
}
Button1_Click
グリッドビューとボタンを実際に作成するもの
public void Button1_Click(object sender, EventArgs e)
{
randomGridView(Table1, 1);
randomGridView(Table2, 4);
}
では、ボタンを発射するにはどうすればよいCustomersGridView_RowCommand
ですか?または、動的に生成されたボタンをリンクすることは不可能ですか?
編集: ASPX ページは次のとおりです。
<table>
<tr>
<td>
<div id="div1" style="width: 257px; height: 500px; overflow-x: scroll; overflow-y: hidden;">
<asp:Table ID="Table1" runat="server">
</asp:Table>
</div>
</td>
<td>
<div id="div2" style="width: 500px; height: 500px; overflow: scroll;">
<asp:Table ID="Table2" runat="server">
</asp:Table>
</div>
</td>
</tr>
</table>