首页 > 解决方案 > 应该具有 DropDownList 控件的单元格在运行时没有控件

问题描述

我试图让 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>

其余列在此处添加到 c# 代码隐藏中:

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 在代码隐藏中创建的下拉字段此时仍为空,虽然 FindControl 在初始化后工作,但该列仍为空白。有没有办法在代码隐藏中制作整个 TemplateField?我天真地期望这会起作用:

TemplateField temp = new TemplateField();
temp.ItemTemplate = dropdown;
RouteGrid.Columns.Add(temp);

但是第二行不起作用,因为 DropDownList 不是 ITemplate,并且转换也不起作用。

编辑2:我已经回答了我自己的问题。在标记中,asp:ItemTemplate应该是ItemTemplate. 我不知道为什么会这样。

标签: c#asp.netgridviewdropdown

解决方案


我已经回答了我自己的问题。在标记中,asp:ItemTemplate 应该是 ItemTemplate。我不知道为什么会这样。


推荐阅读