【问题标题】:How to right align the header of just one Gridview column如何右对齐一个Gridview列的标题
【发布时间】:2012-09-29 23:49:03
【问题描述】:

有人知道如何右对齐gridview 的一列的标题吗?一直在网上搜索,但仍然找不到解决方案。

Horizo​​ntalAlign='Right' 适用于数据,但不适用于标题。我不想右对齐所有列,而只想右对齐一个。

这是代码的摘录:

<asp:GridView ID="gvCustomer" AutoGenerateColumns="False" runat="server">
    <Columns>
        <asp:BoundField DataField="CustomerId" HeaderText="Customer Id" />

               (other fields here)

                <asp:TemplateField HeaderText="Contact Name" HeaderStyle-HorizontalAlign="Right" >
                    <ItemTemplate>
                            <asp:Label runat="server" ID="lblContactName" Text='<%# Eval("ContactName") %>' />
                    </ItemTemplate>
                    <ItemStyle HorizontalAlign="Right" />
                    <HeaderStyle HorizontalAlign="Right" />
                </asp:TemplateField>
    </Columns>
</asp:GridView>

感谢任何帮助。谢谢!

尼基

【问题讨论】:

  • 为什么你在去年问了 9 个问题,但你从来没有接受过任何一个,只投过一个答案?

标签: asp.net gridview header right-align


【解决方案1】:

1 你可以在你的控件上定义GridView

<HeaderStyle HorizontalAlign="Right" />

注意:从项目中删除您的标签。他必须在你的 GridView 控件上

所以

<asp:GridView ID="gvCustomer" AutoGenerateColumns="False" runat="server">
    <HeaderStyle  HorizontalAlign="Right" />
    .....
</asp:GridView>

2 或者你可以在你的项目上定义

<asp:TemplateField HeaderStyle-HorizontalAlign="Right">

注意:使用此解决方案删除 &lt;HeaderStyle HorizontalAlign="Right" /&gt;(必须在您的 GridView 内而不是项目内)

【讨论】:

  • 提问者贴出的代码摘录中已经包含&lt;HeaderStyle HorizontalAlign="Right" /&gt;...
  • 必须在 GridView 内而不是在您的模板项中
  • 或者你可以使用 但你必须在你的项目中删除
  • 我需要在单独的列上右对齐标题,而不是整个gridview。我没有意识到 HeaderStyle 不应该在模板项中。我做了你的建议,但删除 并改用 但标题仍然左对齐。
【解决方案2】:

我们有同样的问题,但我设法克服它。

这是我的解决方案:D

<asp:TemplateField>
     <HeaderStyle Width="100px"/><ItemStyle Width="100px" />
     <HeaderTemplate>
         <div style="text-align:right;">Contact Name</div>
     </HeaderTemplate>
     <ItemTemplate>
        <asp:Label runat="server" ID="lblContactName" Text='<%# Eval("ContactName") %>' />
     </ItemTemplate>
</asp:TemplateField>

【讨论】:

    【解决方案3】:

    examples 中我看到,列标题对齐已使用:

    为特定列设置
    <asp:BoundField DataField="CustomerId" HeaderStyle-HorizontalAlign="Right" />
    

    但这可能等同于您已经在模板中使用的内容:

    <HeaderStyle HorizontalAlign="Right" />
    

    如果这不起作用,问题可能不是您的标题未对齐,而是your header's content 被拉伸到列的全宽,因此对齐无关紧要。

    例如,如果您的单元格标题包含带有 text-align: left 的标题,并且该标题的宽度是其容器的 100%,则容器的水平对齐不会影响它:

    作为一个实验,尝试将 HeaderStyle Width 属性设置为较小的值,看看这是否会影响对齐:

    <HeaderStyle HorizontalAlign="Right" Width="50px" />
    

    您可能必须收缩标题的容器以适应列标题文本,以便标题的 Horizo​​ntalAlign 生效。

    【讨论】:

    • 抱歉赶上了工作。在 Boundfield 上尝试了 HeaderStyle-Horizo​​ntalAlign="Right" 和 HeaderStyle 上的 Horizo​​ntalAlign="Right" ,但都没有工作。我还根据您的建议添加了宽度,但这也不起作用。
    【解决方案4】:

    嗯,Horizo​​ntalAlignment 对我来说很好用。

    我刚刚完成了这个快速测试。请注意,第二列在字段标记中使用 Headerstyle-Horizo​​ntalAlign,而第三列使用带有 Horizo​​ntalAlign 的单独 HeaderStyle 标记。两者都运行良好。

    <asp:GridView ID="gvThings" runat="server" AutoGenerateColumns="false">
        <Columns>
            <asp:BoundField DataField="text" HeaderText="Text" ItemStyle-Width="200" />
            <asp:BoundField DataField="number1" HeaderText="Number 1" ItemStyle-Width="200" ItemStyle-HorizontalAlign="Right" HeaderStyle-HorizontalAlign="Right" />
            <asp:TemplateField HeaderText="Number 2" ItemStyle-Width="200" ItemStyle-HorizontalAlign="Right">
                <HeaderStyle HorizontalAlign="Right" />
                <ItemTemplate>
                    <asp:Label ID="lblNumber2" runat="server" Text='<%# Eval("number2")%>' />
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
     </asp:GridView>
    

    我认为您的想法是正确的,您只是在某些细节上犯了错误。您是否定义了不可覆盖的主题?

    【讨论】:

    • 看到我认为这也有效,这让我认为也许他的列标题模板指定了一个容器,该容器具有自己的文本对齐方式并且正在拉伸以适应列标题容器,从而绕过列- 标题对齐。
    • 或者他的标题有一堆尾随空格,或者类似的愚蠢的东西。无论如何,我认为这不是“我该怎么做”的问题,而是一些 nitnoid 细节中的错误。
    • 标题中没有尾随或前面的空格。我什至在 gridview rowdatabound 中进行了测试:code protected void gvgvCustomer_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.Header) { txtTest.Text = '(' + e.Row.Cells[ 3].文本+')'; }code
    • 我怀疑一个css文件覆盖了设置,所以我把它放在页面上 并应用它: 但还是不行。
    • 你有主题吗?主题可以设置不可覆盖的内容。如果这样做,请尝试删除主题并查看它是否有效。如果做不到这一点,请尝试(a)查看生成的 HTML 并查看它实际放入的内容,也许这会给你一个线索。 (b) 在您使用的任何浏览器中使用 IE 的开发人员工具或同等工具来查看实际应用的样式以及它们的来源。您可能有一个更高的样式,它覆盖了 gridview 试图设置的内容。
    【解决方案5】:

    我知道我的答案为时已晚,但对仍在寻找此问题答案的新人会有所帮助。

    基本上我们可以使用以下任何一个选项

    <asp:TemplateField HeaderStyle-HorizontalAlign=Right>
    

    <HeaderStyle HorizontalAlign="Right" />
    

    DOM 会将其创建为&lt;th align="right" scope="col"&gt;Quantity&lt;/th&gt;。由于某些原因,这个 align = right 属性不起作用,需要分析才能知道正确的原因。

    但是您可以通过创建一个类来使特定标题右对齐并确保也为标题设置 Horizo​​ntalAlign 属性来实现这一点。

    th[align="right"] { text-align:right; }

    【讨论】:

      【解决方案6】:

      试试这个..

      int i=GridView3.HeaderRow.Cells.Count;
          GridView3.HeaderRow.Cells[0].HorizontalAlign = HorizontalAlign.Right;
      

      【讨论】:

        【解决方案7】:

        对于那些可能在 Gridview 上使用 AutoGenerateColumns=True 的人来说,这是上面未涵盖的答案。例如,如果您想从代码隐藏中填充 Gridview,并且还想从代码隐藏中以编程方式创建标题行:

        在填充 Gridview 并调用 DataBind() 之后,在代码中添加以下代码:

                foreach (TableCell cel in grid.HeaderRow.Cells)
                {
                    if (cel.Text == "Price")
                    {
                        cel.Style.Add("width","100%");
                        cel.Style.Add("text-align", "right");
                    }
                } 
        

        这将使包含“价格”的标题单元格 100% 宽度,并在单元格中右对齐单词“价格”。显然,“网格”是我的 GridView 控件的 ID。标题行中的每个单元格都是托管代码上下文中的一个 TableCell 元素。

        我在研究该主题时的观察是,所有答案似乎都假设您在页面的 HTML 中使用模板方法,当然,OP 是,但我不是,也许你们中的一些人不是也是。

        此外,我在这个主题上看到的大多数答案都忽略了我们只想在一个特定的标题单元格上设置对齐的点,而不是整个标题行中的所有单元格。就我而言,我希望所有标题单元格都左对齐,但“价格”标题单元格除外,我希望它右对齐。

        人们可能不想在 HTML 中创建标题,而是在代码隐藏方法中创建标题是有原因的。如果这描述了您的情况,我的回答将使您能够设置每个标题单元格的对齐方式。

        干杯, -=卡梅隆

        【讨论】:

          猜你喜欢
          • 2015-05-05
          • 1970-01-01
          • 2020-01-15
          • 1970-01-01
          • 2011-08-04
          • 2017-11-05
          • 2021-10-14
          • 2010-11-08
          • 2012-02-07
          相关资源
          最近更新 更多