我的问题是,在我的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>
这很奇怪。我希望你能帮助我。提前谢谢!
答案 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并在里面显示一些带有文本框的面板。