微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

应该有 DropDownList 控件的单元格在运行时没有控件

如何解决应该有 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在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。我不知道为什么会这样。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。