【问题标题】:How to iterate through every HTML table in a single HTML row如何遍历单个 HTML 行中的每个 HTML 表
【发布时间】:2023-03-24 15:46:01
【问题描述】:

我在 ASP:Panel 控件中有一个标准的 HTML <table。 在这个 HTML 表里面是一个 <TR 行 在这个 TR 行里面是几个表。

    <asp:panel ID="PanelPreStart" runat="server" Visible="false" Enabled="false" Width="500px" >
        <table runat="server" id="tblPreStart">
    ...
    ...

      <tr id="trRiskMgt" runat="server" visible="false">
            <td colspan="2">
                <strong><big>** RISK MANAGEMENT **</big></strong>
                    <br /><br />
                <table id="tblHOC_MON" runat="server" visible="false">
..
..
                </table>

                <br />

                <table id="tblRMP_TUE" runat="server" visible="false" style="width: 100%; height: 114px; color: black; background-color: white;">
                    <tr>
...
... etc

如何遍历trRiskMgt 行以获取所有表(tblHOC_MON 等)?

我已经尝试过了,但它不起作用。我收到此错误:

CS1579:foreach 语句不能对类型变量进行操作 'System.Web.UI.HtmlControls.HtmlTableRow' 因为 'System.Web.UI.HtmlControls.HtmlTableRow' 不包含公共 'GetEnumerator' 的定义

    foreach (HtmlTableRow trow in trRiskMgt)
    {
        foreach (HtmlTable tbl in trow.Cells)
        {
            foreach (HtmlTableRow row in tbl.Controls)
            {
                foreach (HtmlTableCell cell in row.Cells)
                {
                    foreach (Control ctrl in cell.Controls)
                    {
                        //CONTROL IS TEXBOXT: DISABLE CONTROL (NOT HIDE!)
                        if (ctrl is TextBox)
                        {
                            TextBox txt = (TextBox)ctrl;
                            txt.Enabled = wsDisable;
                        }
                    }
                }
            }
        }
    }

对 JavaScript 和 C# 代码背后的想法表示赞赏。

谢谢

[更新] 我设法通过将上述表格之一硬编码到代码中来解决它......

    foreach (HtmlTableRow row in tblHOC_MON.Rows)
    {
        foreach (HtmlTableCell cell in row.Cells)
        {
            foreach (Control ctrl in cell.Controls)
            {
                //CONTROL IS TEXBOXT: EXTRACT VALUES//
                if (ctrl is TextBox)
                {
                    TextBox txt = (TextBox)ctrl;
                    txt.Enabled = false;
                }
            }
        }
    }

这显然不理想,因为我需要为TR 行中的每个表重复此代码多次。

但现在可以了。

【问题讨论】:

  • 为此,您必须在尝试从 C# 访问的所有标签上指定 runat="server"
  • 仔细观察。他们已经有了。
  • 不,你看得更仔细! &lt;td colspan="2"&gt; 看到了吗?
  • 另外,当你说“但它不起作用”时 - 更具体。
  • 但是 TR 和 TABLE 标签确实有。您是说行内的所有内容都必须有服务器引用吗?

标签: c# asp.net html-table


【解决方案1】:

尝试内部 html 概念。

示例: 要在您的情况下迭代特定的 html 元素说“表格行”,请在您的控制器上编写以下代码:

trRiskMgt.InnerHtml = Server.HtmlEncode("your data");// elementId.InnerHtml

如果您没有指定任何数据,在这种情况下它将显示单行。 随着数据的增加,它将迭代行。

您可以进一步谷歌 HtmlEncode 或 Decode 以获得更好的理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2013-02-28
    • 2019-05-12
    • 2017-03-20
    相关资源
    最近更新 更多