按钮单击一个TableCell的从未火灾和表中消失(Button Click in a TableC

2019-10-22 11:07发布

我我的A SP.NET Webforms的应用程序,我有一个table中,我动态添加的所有数据。 行包含Buttons中的每个细胞。 我想按钮发射onclick事件,当用户点击它。 但是,与下面的代码,事件永远不会触发与表中消失。 下面的代码:

    <asp:Table ID="floorTable" runat="server"  Width="100%" GridLines="Both">
    </asp:Table>

在后面的代码

   // This method is called on a DropDownList SelectedItemChanged Event - so
   // the buttons cannot be created in Page_Load or so. Have to create 
   // totally based on the DropDown selected item.
    private void PopulateFloorRow(int floorNo, FloorPattern fp)
    {
        int cols = fp.UnitPattern.Count;

        // HEADER ROW
        TableRow thead = new TableRow(); 
        thead.Width = Unit.Percentage(100);
        thead.TableSection = TableRowSection.TableHeader;
        TableCell theadCell = new TableCell();
        theadCell.ColumnSpan = cols;
        Label title = new Label();
        title.Text = "Floor # " + floorNo;
        theadCell.Controls.Add(title);
        thead.Controls.Add(theadCell);

        TableRow planRow = GetFloorPlan(floorNo, fp);

        TableRow tr = new TableRow();
        TableCell tc = null;
        int tcWidPerc = (int)fp.UnitPattern.Count / 100;

        foreach (UnitPattern up in fp.UnitPattern)
        {                
            tc = new TableCell();

            Button imgBtn = new Button();

            // On Adding BELOW Line - ERROR - 0x800a1391 - JavaScript runtime error: 'UnitLinkClicked' is undefined
            //imgBtn.Attributes.Add("onClick", "UnitLinkClicked(this)");

            imgBtn.CommandArgument = up.UnitPatternId.ToString(); // I want to know which button is pressed. So, sort of Tag
            imgBtn.Click += new EventHandler(UnitLinkClicked);
            imgBtn.BorderWidth = Unit.Pixel(10);
            imgBtn.BorderColor = Color.Transparent;
            imgBtn.Width = Unit.Percentage(100);
            if (up.UnitNo != null)
            {
                imgBtn.Text = up.UnitNo;
            }

            tc.Controls.Add(imgBtn);

            tr.Controls.Add(tc);
        }

        floorTable.Rows.Add(thead);
        floorTable.Rows.Add(planRow);
        floorTable.Rows.Add(tr);

        // Create Footer
        PopulateTableFooter(cols);

    }

    protected void UnitLinkClicked(object sender, EventArgs e)
    {
        Button btn = (Button)(sender);
        string upId = btn.CommandArgument;

        System.Diagnostics.Debug.WriteLine("LINK Button clicked Of UP ID :" + upId);
    }

编辑:CODE的SelectedIndexChanged加入

我DropDown_SelectedIndexChanged代码:

    protected void floorDropDownList_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (selectedProject == null)
            selectedProject = _db.Projects.Find(projectsList.SelectedValue);

        System.Diagnostics.Debug.WriteLine("SELCTED Project = " + selectedProject.ProjectId);

        // "Select Floor" is selected, so Hide floor Table
        if (floorDropDownList.SelectedValue == "-1")
        {
            floorTable.Visible = false;
        }
        else
        {
            int floorNo = int.Parse(floorDropDownList.SelectedValue);
            if (floorNo > 0)
            {
                PopulateFloorRow(floorNo, (FloorPattern)selectedProject.FloorPattern.ElementAt(floorNo - 1));
            }
        }
    }

如果我在我的选择落“3”下,出现预期的表。 我点击一个按钮,表中消失,但在下拉菜单中仍然是“3”仅值。

编辑零件OVER

与上面的代码,我当我点击一个按钮,该UnitLinkClicked事件从来没有发射(我已经添加断点),整个表中消失。

你能说这可能是什么问题? 默认的按钮,就是要AutoPostBack和它不具有财产了。 缺少什么我在这里,如何解决这个问题。 我坚持这个,因为天,试图找出。

任何帮助,高度赞赏。 谢谢

Answer 1:

您需要设置一个ID为您的按钮。 如果没有ID的事件将不会被解雇。

Button imgBtn = new Button();
imgBtn.ID = "imgBtn";

还要确保每次添加按钮都有一个唯一的ID。 你也许没有拼接地板。 或任何其他领域的唯一的名称到达。

此外,该表将消失,除非,您管理您的Page_Load。 你需要重新加载表如果下拉有一个选定的索引。

编辑:代码示例

的.cs代码

protected void Page_Load(object sender, EventArgs e)
{
    if (IsPostBack)
    {
        PopulateFloorRow();
    }
}        

protected void cmb_SelectedIndexChanged(object sender, EventArgs e)
{
    PopulateFloorRow();
}

private void PopulateFloorRow()
{
    floorTable.Rows.Clear();

    for (int i = 0; i < 2; i++)
    {
        TableRow tableRow = new TableRow();
        tableRow.Cells.Add(new TableCell());
        tableRow.Cells.Add(new TableCell());

        tableRow.Cells[0].Controls.Add(new Label() { Text = cmb.SelectedItem.Text });
        Button button = new Button();
        button.ID = "btn" + i.ToString();
        button.Text = "Click";
        button.Click += button_Click;
        tableRow.Cells[1].Controls.Add(button);
        floorTable.Rows.Add(tableRow);
    }

}

void button_Click(object sender, EventArgs e)
{
    throw new NotImplementedException();
}

的.aspx代码

<asp:DropDownList id="cmb" runat="server" OnSelectedIndexChanged="cmb_SelectedIndexChanged" AutoPostBack="true"><asp:ListItem>One</asp:ListItem><asp:ListItem>Two</asp:ListItem></asp:DropDownList>
<asp:Table ID="floorTable" runat="server"  Width="100%" GridLines="Both">
</asp:Table>


文章来源: Button Click in a TableCell never fires and table disappears