问题描述
我正在尝试让 DropDownList 显示在 c#/asp.net 的 GridView 中。 GridView 的 html 包含:
<Columns>
<asp:TemplateField HeaderText ="Initials">
<asp:ItemTemplate>
<asp:DropDownList ID="dropdown" runat="server">
<asp:ListItem Value="-1">Select</asp:ListItem>
</asp:DropDownList>
</asp:ItemTemplate>
</asp:TemplateField>
</Columns>
var RouteRow = (new RoutesTableAdapter()).GetDataBy(this.AtmId);
RouteGrid.DataSource = RouteRow;
foreach (DataColumn col in RouteRow.Columns)
{
BoundField field = new BoundField();
field.datafield = col.ColumnName;
field.HeaderText = col.ColumnName;
if (!col.ColumnName.Equals("Num")) field.DataFormatString = "{0:N}";
RouteGrid.Columns.Add(field);
}
RouteGrid.DataBind();
DataBind 调用后,有一个名为 Initials 的列,但所有的单元格都是空的,尝试在 DaTarowBound 中查找“下拉”控件返回 null。我意识到在标记中创建一些列而在代码隐藏中创建一些列可能不是最佳实践,但我不明白为什么该列仍然存在但没有控件。
编辑:
此时asp.net在code-behind中创建的下拉字段还是null,虽然FindControl在初始化后可以工作,但该列仍然是空的。有没有办法在代码隐藏中制作整个 TemplateField?我天真地希望这能奏效:
TemplateField temp = new TemplateField();
temp.ItemTemplate = dropdown;
RouteGrid.Columns.Add(temp);
但是第二行不起作用,因为 DropDownList 不是 ITemplate,并且转换也不起作用。
编辑 2:我已经回答了我自己的问题。在标记中,asp:ItemTemplate
应为 ItemTemplate
。我不知道为什么会这样。
解决方法
我已经回答了我自己的问题。在标记中,asp:ItemTemplate 应该是 ItemTemplate。我不知道为什么会这样。