title: HTML ASP Table cells shifting left when they are empty
body: <p>I'm using ASP.NET 3.0+, and have a table as follows:</p>
  
  <pre><code> &lt;asp:Table ID="metadataTable" runat="server" BorderWidth="0" CellSpacing="5"&gt;
      &lt;asp:TableRow&gt;
          &lt;asp:TableCell BorderWidth="3" ID="tcProperties1" &gt;&lt;asp:PlaceHolder ID="Properties1" runat="server"&gt;&lt;/asp:PlaceHolder&gt;&lt;/asp:TableCell&gt;
          &lt;asp:TableCell BorderWidth="3" ID="tcProperties2" &gt;&lt;asp:PlaceHolder ID="Properties2" runat="server"&gt;&lt;/asp:PlaceHolder&gt;&lt;/asp:TableCell&gt;
          &lt;asp:TableCell BorderWidth="3" ID="tcProperties3" &gt;&lt;asp:PlaceHolder ID="Properties3" runat="server"&gt;&lt;/asp:PlaceHolder&gt;&lt;/asp:TableCell&gt;
      &lt;/asp:TableRow&gt;
      &lt;asp:TableRow&gt;
          &lt;asp:TableCell BorderWidth="3" ID="tcTree1" VerticalAlign="Top"&gt;&lt;asp:PlaceHolder ID="Tree1" runat="server"&gt;&lt;/asp:PlaceHolder&gt;&lt;/asp:TableCell&gt;
          &lt;asp:TableCell BorderWidth="3" ID="tcTree2" VerticalAlign="Top"&gt;&lt;asp:PlaceHolder ID="Tree2" runat="server"&gt;&lt;/asp:PlaceHolder&gt;&lt;/asp:TableCell&gt;
          &lt;asp:TableCell BorderWidth="3" ID="tcTree3" VerticalAlign="Top"&gt;&lt;asp:PlaceHolder ID="Tree3" runat="server"&gt;&lt;/asp:PlaceHolder&gt;&lt;/asp:TableCell&gt;
      &lt;/asp:TableRow&gt;
   &lt;/asp:Table&gt;
  </code></pre>
  
  <p>The problem is that the placeholders are sometimes intentionally empty.  For this I call:</p>
  
  <pre><code>tcProperties2.Visible = false;
  tcTree1.Visible = false;
  tcTree3.Visible = false;
  </code></pre>
  
  <p>and the cells are shifting left.  i.e. when I want:</p>
  
  <pre><code>[Cell 0,0]            [Cell 2,0]
             [Cell 1,1]
  </code></pre>
  
  <p>where cell 0,1 1,0 and 2,1 have no Controls, and I get the following instead:</p>
  
  <pre><code>[Cell 0,0] [Cell 2,0]
  [Cell 1,1]
  </code></pre>
  
  <p>Is there any way to keep them spaced out without using the obvious &amp;nbsp hack?</p>