簡體   English   中英

動態創建的表在回發時丟失行

[英]Dynamically-created table loses rows on postback

我有一個表只有一個由5列(單元格)組成的TableHeaderRow。 第一個單元格/列有一個復選框,我希望它是代碼隱藏中動態創建的行的“全部檢查”。

表:

<asp:Table runat="server" ID="tblReports" CssClass="table table-condensed table-bordered">
                    <asp:TableHeaderRow>
                        <asp:TableHeaderCell CssClass="text-center">
                            <asp:UpdatePanel runat="server" ID="updatePanelCheckAllReports" ChildrenAsTriggers="true">
                                <ContentTemplate>
                                    <asp:CheckBox runat="server" ID="cbCheckAllReports" OnCheckedChanged="cb_CheckedChanged" AutoPostBack="true" />
                                </ContentTemplate>
                            </asp:UpdatePanel>
                        </asp:TableHeaderCell>
                        <asp:TableHeaderCell>
                        </asp:TableHeaderCell>
                        <asp:TableHeaderCell CssClass="text-center">
                                <h4>Reports</h4>
                        </asp:TableHeaderCell>
                        <asp:TableHeaderCell CssClass="text-center">
                                <h5>Oldest<br />ONLINE<br />ArchiveDate</h5>
                        </asp:TableHeaderCell>
                        <asp:TableHeaderCell CssClass="text-center">
                                <h5>Newest<br />OFFLINE<br />ArchiveDate</h5>
                        </asp:TableHeaderCell>
                    </asp:TableHeaderRow>
                </asp:Table>

Build_Reports_Table:

using (DBContext dc = new DBContext())
            {
                List<string> reports = dc.Database.SqlQuery<string>("SELECT name FROM sys.tables WHERE name like 'report%history' ORDER BY name").ToList();

                foreach (string report in reports)
                {
                    TableRow tableRow = new TableRow();
                    TableCell tableCellCheckBox = new TableCell();
                    TableCell tableCellLabel = new TableCell();
                    CheckBox checkBox = new CheckBox();
                    Label label = new Label();
                    checkBox.ID = "cb" + report;
                    tableCellCheckBox.Controls.Add(checkBox);
                    label.Text = report;
                    tableCellLabel.Controls.Add(label);
                    tableRow.Cells.Add(new TableCell());
                    tableRow.Cells.Add(tableCellCheckBox);
                    tableRow.Cells.Add(tableCellLabel);
                    tableRow.Cells.Add(new TableCell());
                    tableRow.Cells.Add(new TableCell());
                    tblReports.Rows.Add(tableRow);
                }
            }

cb_CheckedChanged方法:

CheckBox checkBox = (CheckBox)sender;
            if (checkBox.ID == "cbCheckAllReports")
            {
                if (checkBox.Checked)
                {
                    foreach (TableRow tableRow in tblReports.Rows)
                    {
                        if (!(tableRow is TableHeaderRow) && !(tableRow is TableFooterRow))
                        {
                            CheckBox cbReport = (CheckBox)tableRow.Cells[1].Controls[1];
                            cbReport.Checked = true;
                        }
                    }
                }
                else
                {
                    foreach (TableRow tableRow in tblReports.Rows)
                    {
                        if (!(tableRow is TableHeaderRow) && !(tableRow is TableFooterRow))
                        {
                            CheckBox cbReport = (CheckBox)tableRow.Cells[1].Controls[1];
                            cbReport.Checked = false;
                        }
                    }
                }
            }

在Page_Load中運行Build_Reports_Table后,表構建正常。

問題是,對於cb_CheckedChanged觸發“全部檢查”復選框必須具有AutoPostBack = true 使用該集合,當頁面回發表時,丟失所有那些動態添加的行,並且所有表都具有靜態TableHeaderRow。

我已經嘗試在表格周圍放置一個UpdatePanel,但是沒有用。 然后,我將UpdatePanel放在Checkbox控件周圍,但這不起作用。 兩次調試cb_CheckedChanged函數時,tblReports.Rows只有靜態的TableHeaderRow行。

更新

母版頁上有一個ScriptManager

嘗試:只在第一次加載時構建,而不是在回發上構建。

if(!Page.IsPostBack)
{
    // build reports table.
}

我最終用jQuery解決了它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM