【发布时间】:2014-04-23 16:33:53
【问题描述】:
在 GridView 的 Header 中添加带有多个控件(如 textBoxes)的新行时遇到问题。当我使用 GridView_RowCreated 方法将它们添加到 Header 中时...
if (e.Row.RowType == DataControlRowType.Header)
{
GridViewRow r = new GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Normal);
TableCell tc = new TableCell();
.. 他们总是放在第一行,而不是第二行。我怎样才能改变它?我希望我创建的行放在第二个标题行中。
我尝试自己做,首先,我将 ShowHeader 修改为 false 并以编程方式添加第一行和第二行,但这是错误的方式,特别是当网格没有数据要显示但需要显示标题时。我发现了这个讨论similar discussion,但是智能不知道覆盖 PrepareControlHierarchy。我尝试用Object浏览器搜索它,发现这是GridView的方法,但我无法插入并测试。也许有人知道这个问题的更简单的解决方案。
我需要一些帮助。
已更新!!!
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CellPadding="4" DataKeyNames="username" DataSourceID="SqlDataSource1"
ForeColor="#333333" GridLines="None" onrowcreated="GridView1_RowCreated">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField HeaderText="username" SortExpression="username">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("username") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name" SortExpression="Name">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Surname" SortExpression="Surname">
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("Surname") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
已更新!!!!
是的,教授你是对的,在我的情况下,这是在 HeaderTemplate 中放置控件的最简单方法。我忘记了。但我有一个小问题,如何在不添加额外标签的情况下添加列名?这是我的代码:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
CellPadding="4" DataKeyNames="username" DataSourceID="SqlDataSource1"
ForeColor="#333333" GridLines="None" onrowcreated="GridView1_RowCreated">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:TemplateField **HeaderText="username"** SortExpression="username">
<HeaderTemplate>
**<asp:Label ID="Label4" runat="server" Text="username"></asp:Label>**<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("username") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Name" SortExpression="Name">
<HeaderTemplate>
<asp:Label ID="Label4" runat="server" Text="Name"></asp:Label><br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Name") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Surname" SortExpression="Surname">
<HeaderTemplate>
<asp:Label ID="Label4" runat="server" Text="Surname"></asp:Label><br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="Label3" runat="server" Text='<%# Bind("Surname") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
我标记了粗体字符串。如果我离开时没有标签(仅使用 HeaderText="username"),则不会在标题列中显示任何名称。只有当我添加标签时,它才会显示我的名字。它有什么问题?
【问题讨论】:
-
为什么不在 headertemplate 标签内创建呢?你能展示一下需求的快照吗?
-
我创建了,还以编程方式创建了一些控件。现在我有一个问题,如何更改 headerstemplate 行和我以编程方式创建的行的位置?
-
你能发布你的标题模板html标记吗?
-
我添加了标记,谷歌搜索还没有帮助
-
请注意,我在您编辑之前已回答,但我的示例显示了如何完成您的后续问题。只需将标签作为内联文本。