【问题标题】:ListView - ItemTemplate table stylingListView - ItemTemplate 表格样式
【发布时间】:2013-01-15 21:44:37
【问题描述】:

我正在尝试使用 4x3 表创建 ItemTemplate。我希望第一列包含图像,其他列中的单元格包含有关图像的信息。我正在使用下面的代码,但第一行呈现在图像底部,第二行呈现在图像下方。我做错了什么?

提前致谢。

<LayoutTemplate>
        <table runat="server" cellpadding="2" id="tblBooks" style="">
          <tr runat="server">
              <td runat="server">
                  <table ID="itemPlaceholderContainer" runat="server" border="0" style="">
                      <tr ID="itemPlaceholder" runat="server">
                      </tr>
                  </table>
              </td>
          </tr>
            <tr runat="server">
                <td runat="server" style="">
                    <asp:DataPager ID="DataPager1" runat="server">
                        <Fields>
                            <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" 
                                ShowNextPageButton="False" ShowPreviousPageButton="False" />
                            <asp:NumericPagerField />
                            <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True" 
                                ShowNextPageButton="False" ShowPreviousPageButton="False" />
                        </Fields>
                    </asp:DataPager>
                </td>
            </tr>
        </table>
    </LayoutTemplate>
<ItemTemplate>
         <tr runat="server">
            <td rowspan="4">
                <asp:Image ID="Image1" runat="server" ImageUrl='<%# String.Format("~\\Static\\Images\\BookCovers\\{0}", Eval("CoverImageSmall")) %>' Height="120" Width="90"/>
            </td>
            <td colspan="2" style="font-size:large; padding-bottom:5px; padding-left:10px; color:Black;">
                <asp:Label runat="server" ID="TitleLabel" Text='<%# Eval("Title") %>' />
            </td>  
         </tr>
         <tr runat="server">
            <td colspan="2" style="padding-left:10px;">
                <asp:Label runat="server" ID="FirstNameLabel" Text='<%# Eval("FirstName") %>' />
                <asp:Label runat="server" ID="LastNameLabel" Text='<%# Eval("LastName") %>' />
            </td>
         </tr>
         <tr runat="server">
            <td colspan="2" style="padding-left:10px;">
            </td>
         </tr>
         <tr runat="server">
            <td>
            </td>
            <td>
            </td>
         </tr>
    </ItemTemplate>

编辑:为了更清楚,我追求的结果是这样的:

______________________________________________
|               |___________Title_____________|
|    Image      |____________Name_____________|
|               |______Value_____|____Value___|
|_______________|______Value_____|____Value___|

但我得到的是:

______________________________________________
| _____________ |                             |
||   Image    | |                             |
||            | |                             |
||____________| |___________Title_____________|
|               |____________Name_____________|
|               |______Value_____|____Value___|
|_______________|______Value_____|____Value___|

CSS 已重置。

【问题讨论】:

  • 你在其他浏览器中测试过吗?行为相同还是不同?
  • 在 IE 和 Firefox 中,它们具有上述行为。然而,在 chrome 中,事情变得更奇怪了......标题单元格仍然出现在相同的位置,但名称单元格出现在它上面(如果一切正常,我希望它会出现在这个位置)。

标签: asp.net html css


【解决方案1】:

rowspan 会自动生成该列,并且所有其他行/单元格都将添加到它周围。您可以删除所有 colspan 和最后一行中的第二个 td。

<ItemTemplate>
     <tr runat="server">
        <td rowspan="4">
            <asp:Image ID="Image1" runat="server" ImageUrl='<%# String.Format("~\\Static\\Images\\BookCovers\\{0}", Eval("CoverImageSmall")) %>' Height="120" Width="90"/>
        </td>
        <td style="font-size:large; padding-bottom:5px; padding-left:10px; color:Black;">
            <asp:Label runat="server" ID="TitleLabel" Text='<%# Eval("Title") %>' />
        </td>  
     </tr>
     <tr runat="server">
        <td style="padding-left:10px;">
            <asp:Label runat="server" ID="FirstNameLabel" Text='<%# Eval("FirstName") %>' />
            <asp:Label runat="server" ID="LastNameLabel" Text='<%# Eval("LastName") %>' />
        </td>
     </tr>
     <tr runat="server">
        <td style="padding-left:10px;">
        </td>
     </tr>
     <tr runat="server">
        <td>
        </td>
     </tr>
</ItemTemplate>

更新:根据提供的 jsfiddle,它表明问题出在使用由重置 css 样式表应用的垂直对齐:基线属性。如果该 CSS 属性被删除,或者标题单元格被覆盖为类似于 vertical-align:bottom 的内容,它会按预期显示。见http://jsfiddle.net/9HsvF/10/

【讨论】:

  • 试过了,但没有任何改变。第二列的顶部单元格仍然表现得好像它从第一个 继承 rowspan="4"
  • @Tsarl:jsfiddle.net/9HsvF 不是预期的行为吗?如果是,HTML 是正确的。也许它与页面上的其他 CSS 或标签输出的内容有关?你能提供更详细的代码和/或输出吗?
  • 这正是我所追求的,但似乎有些事情搞砸了。更新了问题。我不确定我理解你所说的输出是什么意思......
  • @Tsarl:ASCII 艺术版很有帮助,谢谢。输出是指最终生成的 HTML 以及所有资产等。您的 HTML sn-p 看起来是正确的,因此它可能是与 CSS 规则的交互,或者是特定于“标题”单元格中的内容使其如此之大。仅从提供的 HTML 很难判断它可能是什么。能不能把页面尽可能的简化,放到一个jsfiddle里可以复现?
  • @Tsarl:哦,我明白了。这是因为您的 CSS 重置时的垂直对齐。有关如何修复它,请参阅我上面的编辑。
【解决方案2】:

我写了一个简单的代码:
&lt;tr&gt;
  &lt;td&gt;Image Code&lt;/td&gt;
  &lt;td colspan="2"&gt;Title&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td rowspan="3"&gt;&lt;td&gt;
&lt;td colspan="2"&gt;Name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Value1&lt;td&gt;
  &lt;td&gt;Value2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;Value1&lt;td&gt;
 @987654 @
&lt;/tr&gt;
用你的代码试试这个。希望它能如你所愿。

【讨论】:

  • 感谢您的帮助,但我希望图像单元格具有 rowspan="4"。您的代码给出的表格格式与我的目标略有不同。
猜你喜欢
相关资源
最近更新 更多
热门标签