【问题标题】:Why extra cells generate automatically?为什么额外的细胞会自动生成?
【发布时间】:2015-09-28 14:37:24
【问题描述】:

我的问题是,在我的 GridView 中,会自动生成空单元格。我希望他们不要出现。我将 ShowHeaderWhenEmpty 和 AutoGenerateColumns 都设置为 false,并且 TempateFields、ths 和 tds 的数量相同。以下是它的显示方式:

当为空时,第一列上方有一个空单元格。

在 PostBack 之后,但仍然是空的,有一个空单元格占据了上面的整行。

但是,有数据就完美了。

因为声望不够,不能发图,但希望大家还是能想象和理解。

这是我的 aspx 代码:

<asp:GridView ID="GridViewCommentaires" runat="server" ShowHeaderWhenEmpty="false"
        ShowFooter="true" AutoGenerateColumns="false" BorderColor="Black">
        <Columns>

            <asp:TemplateField HeaderText="Date" ItemStyle-Width="100">
                <ItemStyle HorizontalAlign="Center" />
                <ItemTemplate>
                    <asp:HiddenField ID="HiddenFieldIdCommentaire" runat="server" Value='<%# Eval("[idCommentaire]") %>' />
                    <asp:Label ID="LabelCommentaireDate" runat="server" Text='<%# Convert.ToDateTime(Eval("dtHrEntree")).ToString("d") %>'></asp:Label>
                </ItemTemplate>
                <FooterTemplate>
                    <asp:TextBox Width="100%" runat="server" ID="TextBoxCommentaireDate" Enabled="false"
                        BorderStyle="None" />
                </FooterTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Entré par" ItemStyle-Width="175">
                <ItemStyle HorizontalAlign="Center" />
                <ItemTemplate>
                    <asp:Label ID="LabelCommentaireModifiePar" runat="server" Text='<%# Eval("[modifieParComplet]") %>'></asp:Label>
                </ItemTemplate>
                <FooterTemplate>
                    <asp:TextBox Width="100%" runat="server" ID="TextBoxCommentaireModifiePar" Enabled="false"
                        BorderStyle="None" />
                </FooterTemplate>
            </asp:TemplateField>

            <asp:TemplateField HeaderText="Commentaire" ItemStyle-Width="725">
                <ItemTemplate>
                    <asp:Label ID="LabelCommentaire" Width="700px" runat="server" Text='<%# Eval("[commentaire]") %>'></asp:Label>
                </ItemTemplate>
                <FooterTemplate>
                    <asp:TextBox Width="100%" ID="TextBoxCommentaire" runat="server" BorderStyle="None" />
                </FooterTemplate>
            </asp:TemplateField>

            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButtonSupprimerCommentaire" CssClass="ImageSupprimer" OnClick="LinkButtonSupprimerCommentaire_Click"
                        Text="" ToolTip="Supprimer" runat="server" ForeColor="Transparent" Width="16px"
                        Height="16px" OnClientClick="return confirm('Supprimer le commentaire ?')" />
                </ItemTemplate>
                <FooterTemplate>
                    <asp:LinkButton ID="LinkButtonAjouterCommentaire" CssClass="ImageSauvegarder" OnClick="LinkButtonAjouterCommentaire_Click"
                        Text="" ToolTip="Ajouter" runat="server" ForeColor="Transparent" Width="16px"
                        Height="16px" />
                </FooterTemplate>
            </asp:TemplateField>

        </Columns>

        <EmptyDataTemplate>
            <tr>
                <th scope="col">
                    Date
                </th>
                <th scope="col">
                    Entré par
                </th>
                <th scope="col">
                    Commentaire
                </th>
                <th scope="col">
                </th>
            </tr>
            <tr>
                <td style="width: 100px">
                    <asp:TextBox Width="100%" runat="server" ID="TextBoxCommentaireDate" Enabled="false"
                        BorderStyle="None" />
                </td>
                <td style="width: 175px">
                    <asp:TextBox Width="100%" runat="server" ID="TextBoxCommentaireModifiePar" Enabled="false"
                        BorderStyle="None" />
                </td>
                <td style="width: 725px">
                    <asp:TextBox Width="100%" ID="TextBoxCommentaire" runat="server" BorderStyle="None" />
                </td>
                <td align="center">
                    <asp:LinkButton ID="LinkButtonAjouterCommentaire" CssClass="ImageSauvegarder" OnClick="LinkButtonAjouterCommentaire_Click"
                        ToolTip="Ajouter" runat="server" ForeColor="Transparent" Width="16px"
                        Height="16px" />
                </td>
            </tr>
        </EmptyDataTemplate>
    </asp:GridView>

这很奇怪。我希望你能帮助我。提前致谢!

【问题讨论】:

    标签: asp.net gridview cell generated


    【解决方案1】:

    这种行为的原因很可能是您收到的没有数据的标记不一致。 EmptyDataTemplate 用于定义空数据集显示的行内容:

    当绑定到控件的数据源不包含任何记录时,空数据行显示在 GridView 控件中。您可以使用 EmptyDataTemplate 属性为空数据行定义自己的自定义用户界面 (UI)。

    所以我认为正在发生的事情是您的标记被插入到由 GridView 创建的 tr 标记内,从而为您提供如下标记:

    <table>                <-- comes from GridView
        <tr>               <-- comes from GridView
            <tr>           <-- comes from your template
                <th>...
            </tr>
            <tr>           <-- comes from your template
                <td>...
            </tr>
    

    这很容易导致 UI 波动。

    虽然我不能 100% 确定它会起作用,但简单的解决方法是将模板包装在正确的 &lt;table&gt; 标签中:

    <EmptyDataTemplate>
        <table>
            <tr>...
        </table>
    </EmptyDataTemplate>
    

    如果您对EmptyDataTemplate 的样式有疑问,请使用EmptyDataRowStyle 控制其外观:

    要控制空数据行的样式,请使用 EmptyDataRowStyle 属性。

    另一种方法是重新考虑处理无数据情况的方式,也许完全隐藏 GridView 并显示一些带有文本框的面板。

    【讨论】:

    • 太棒了!唯一的问题是 EmptyDataTemplate 制作了另一层边框,我无法将其删除。还尝试了 EmptyDataRowStyle 并且它没有删除它。一个想法?
    • @Yannick,它在同一个 MSDN 页面上。查看帖子的更新
    • 对不起,你能举个例子吗?
    • @Yannick,当然,应该这样做:&lt;EmptyDataRowStyle BorderStyle="None"/&gt;
    • 它不起作用,我想知道为什么......我什至尝试使用 CssClass 并且它也不起作用。我搜索了一下,似乎我不是唯一一个遇到 EmptyDataRowStyle 和 EmptyDataTemplate 问题的人。他们说解决方案是 css,但它对我不起作用......:s
    猜你喜欢
    • 1970-01-01
    • 2011-09-20
    • 2021-11-07
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 2021-04-04
    相关资源
    最近更新 更多