为什么额外的细胞自动生成

时间:2015-09-28 14:37:25

标签: asp.net gridview cell generated

我的问题是,在我的GridView中,会自动生成空单元格。我希望他们不要出现。我的ShowHeaderWhenEmpty和AutoGenerateColumns都为false,而 TempateField th td 的数量相同。以下是它的显示方式:

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

在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>

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

1 个答案:

答案 0 :(得分:0)

此行为的原因很可能是您收到的没有数据的标记不一致。 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>

这很容易导致用户界面波动。

简单修复,虽然我不是100%确定它会起作用,但是将模板包装在正确的<table>标记中:

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

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

  

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

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