html 表中的 div 在代码隐藏中更改可见性时不显示

Div inside a html table not showing when visibility is changed in code behind

提问人:altaaf.hussein 提问时间:8/9/2023 更新时间:8/10/2023 访问量:61

问:

我希望有人能帮助我。我正在尝试做一些听起来很简单的事情,我相信我过去也这样做过,但我正在努力让它发挥作用。任何帮助将不胜感激。

我有一个带有行 (tr) 的 html 表作为 runat 服务器,所以我可以决定是否显示它们,但这完全取决于给定行的单元格中是否有任何内容要显示。例如,如果第一行在两个单元格 (td) 中的任何一个单元格中都没有任何数据,则没有理由显示第 1 行,以此类推。这一切都在 ASP.NET

最初我尝试了以下方法

<table>
  <tr id="row1" runat="server" visible="false">
    <td id="col1Row1" runat="server" visible="false">
      * SOME STUFF HERE EG CONTROLS, DATA ETC
    </td>
    <td id="col2Row1" runat="server" visible="false">
      * SOME STUFF HERE EG CONTROLS, DATA ETC
    </td>
  </tr>
  <tr id="row2" runat="server" visible="false">
    <td id="col1Row2" runat="server" visible="false">
      * SOME STUFF HERE EG CONTROLS, DATA ETC
    </td>
    <td id="col2Row2" runat="server" visible="false">
      * SOME STUFF HERE EG CONTROLS, DATA ETC
    </td>
  </tr>
</table>

现在,在使用 VB.NET 的代码中,我有例程来显示来自数据库的数据,并且根据数据将决定是否在 td 中显示任何内容。因此,让我们以以下代码为例,我有一个可见的 td,另一个不可见。

col1Row1.Visible = False
col2Row1.Visible = True

row1.visible = (col1Row1.Visible OR col2Row1.Visible)

这表明行的可见性取决于其单元格是否可见(而单元格又取决于数据)。这似乎不起作用,所以我想,因为这是一张表,也许它不允许我更改 .可见属性,所以我将代码更改为如下所示

<table>
      <tr id="row1" runat="server" visible="false">
        <td id="col1Row1">
          <div id="Col1Data1" runat="server" visible="false">
            * SOME STUFF HERE EG CONTROLS, DATA ETC
          </div>
        </td>
        <td id="col2Row1">
          <div id="Col2Data1" runat="server" visible="false">
            * SOME STUFF HERE EG CONTROLS, DATA ETC
          </div>
        </td>
      </tr>
      <tr id="row2" runat="server" visible="false">
        <td id="col1Row2">
          <div id="Col1Data2" runat="server" visible="false">
            * SOME STUFF HERE EG CONTROLS, DATA ETC
          </div>
        </td>
        <td id="col2Row2">
          <div id="Col2Data2" runat="server" visible="false">
            * SOME STUFF HERE EG CONTROLS, DATA ETC
          </div>
        </td>
      </tr>
    </table>

如您所见,我更改了 html/asp.net 以包含一个除法,而不是使 then 可见/不可见。我 VB.net 背后的代码如下所示

Col1Data1.Visible = False
Col2Data1.Visible = True
    
row1.visible = (Col1Data1.Visible OR Col2Data1.Visible)

因此,从这里开始,我们将根据数据设置 div 的可见性,例如,我快速设置了它们(显然我选择显示一个而不是不显示一个,但它可以是任意数量的排列)。但是,这仍然不起作用,调试似乎表明 division in 没有改变其可见性状态。

Col1Data1.Visible = False
Col2Data1.Visible = True

我知道分区的可见性可以像这样更改,因为我在我正在处理的同一个屏幕中都这样做了,但是当它在表格内时,这似乎不起作用。任何人都知道我做错了什么以及如何让它发挥作用。请记住,这是我正在做的事情的一种非常简单的代码形式,因为我最终将 div 对象传递到不同的地方,因为它从不同的地方获取数据,这决定了它的可见性,但是在我的调查过程中,我可以看到这不会改变它,无论何时在表中。

感谢您的帮助

C# HTML asp.net vb.net

评论


答:

0赞 brt 8/9/2023 #1

您可以使用 javascript 更改行的可见性。

<script>
var dataCol= document.getElementById('Col1Data1');

       if(dataCol)){
         dataCol.show();
        }
</script>

评论

0赞 altaaf.hussein 8/9/2023
我不确定这将有什么帮助,因为这一切都是由 VB.net 和 c# 中的数据库的数据决定的,它是更大生态系统的一部分。我似乎已经让它工作了,但购买将 tr 可见更改为 true,我在调用模态表单(显示数据的模态表单)开始时 VB.net 执行此操作,此例程清除所有控件,因此在我加载数据之前,我们有一个空白画布可以使用。将 tr 更改为 visible = true 似乎表明 divs 可见性没有改变,因为它无法被看到,或者它自动从其父级 tr 获取它
0赞 Albert D. Kallal 8/10/2023 #2

你所拥有的工作,只是你必须打开一整行,然后才能对列进行任何更改。

因此,此标记:

    <table >
      <tr id="row1" runat="server" visible="false">
        <td id="col1Row1" runat="server" visible="false">
          my col1 row 1
        </td>
        <td id="col2Row1" runat="server" visible="false">
          my col2 row 1
        </td>
      </tr>
      <tr id="row2" runat="server" visible="false">
        <td id="col1Row2" runat="server" visible="false">
          my col1 row 2
        </td>
        <td id="col2Row2" runat="server" visible="false">
          my col2 row 2
        </td>
      </tr>
    </table>
    <br />
        <asp:Button ID="Button1" runat="server" Text="test"
            OnClick="Button1_Click"
            />

对于按钮,然后是这个:

Protected Sub Button1_Click(sender As Object, e As EventArgs)

    row1.Visible = True  ' must turn on row, to show colums
    col1Row1.Visible = True


End Sub

结果是这样的:

enter image description here

因此,如果隐藏整行,那么尝试显示/隐藏列当然是行不通的。

评论

0赞 Shahram Alemzadeh 8/10/2023
语句的优先级似乎无效,即行可见性可以设置在列可见性之后。但是应该正确确定这些值。
0赞 Albert D. Kallal 8/10/2023
语句的顺序无关紧要,发布的代码在发布的代码中 100% 正常工作。重要的是,只有相关行可见。不管你是在显示行之前还是之后隐藏/显示列,但在一天结束时,该行必须可见,以便列无论如何都要显示。同样,发布的代码 100% 正常工作
0赞 Shahram Alemzadeh 8/11/2023
亲爱的 Kallal 先生,我知道您的代码 100% 有效,并且没有批评它。只是想清除您在代码中的注释所暗示的观点(至少对我而言):“必须打开行,才能显示列”。线程启动器也打开了行可见性,但分配的值不是他所期望的,这是问题的实际原因。如果我错了,请忽略我之前的评论。
0赞 Shahram Alemzadeh 8/10/2023 #3

原因是在设置 row1.visible 时,列可见性仍未正确设置。尝试这样的事情:

DIM col1Row1_visibilty AS BOOLEAN = FALSE
DIM col2Row1_visibilty AS BOOLEAN = FALSE
IF (True Condition for col1Row1) THEN
    col1Row1_visibilty = TRUE
END IF
IF (True Condition for col2Row1) THEN
    col2Row1_visibilty = TRUE
END IF
col1Row1.Visible = col1Row1_visibilty
col2Row1.Visible = col2Row1_visibilty
row1.Visible = (col1Row1_visibilty Or col2Row1_visibilty)

或者这个:

IF (True Condition for col1Row1) THEN
    col1Row1.Visible = True
    row1.Visible = True
END IF
IF (True Condition for col2Row1) THEN
    col2Row1.Visible = True
    row1.Visible = True
END IF