代码之家  ›  专栏  ›  技术社区  ›  Dan Byström

如何将组合框添加到asp.net未绑定的GridView

  •  2
  • Dan Byström  · 技术社区  · 14 年前

    在运行时通过代码 .

    1 回复  |  直到 14 年前
        1
  •  0
  •   Brissles    14 年前

    以编程方式:

    我在过去使用过下面的类(但用于下拉和复选框绑定),它实现了ITemplate。

    public class AddTemplateToGridView : ITemplate
    {
        String columnName;
    
        public AddTemplateToGridView(String colname)
        {
            columnName = colname;
        }
    
        void ITemplate.InstantiateIn(System.Web.UI.Control container)
        {
            if (columnName == "yourField")
            {
                ComboBox cb = new ComboBox();
                cb.DataBinding += new EventHandler(cb_DataBinding);
                container.Controls.Add(cb);
            }
        }
    
        void cb_DataBinding(object sender, EventArgs e)
        {
            ComboBox cb = (ComboBox)sender;
            GridViewRow container = (GridViewRow)cb.NamingContainer; 
            Object dataValue = DataBinder.Eval(container.DataItem, columnName); 
            if (dataValue != DBNull.Value) 
            {
                // Assign ComboBox vals if necessary
                ... = dataValue
            }
        }
    }
    

    通过在codebehind中声明GridView和TemplateField来使用:

    GridView newGrid = new GridView();
    TemplateField field = new TemplateField();
    field.HeaderText = "columnName";
    field.ItemTemplate = // some item template
    field.EditItemTemplate = new AddTemplateToGridView("yourField");
    newGrid.Columns.Add(field);
    

    <asp:GridView ID="GridView1" runat="server">  
    <Columns>              
        <asp:TemplateField HeaderText="yourField">
            <ItemTemplate>
                <asp:Label runat="server" Text ='<%# Eval("yourField") %>' />
            </ItemTemplate>
            <EditItemTemplate>         
                <%--Your ComboBox--%>
            </EditItemTemplate>  
        </asp:TemplateField>
    </Columns>
    </asp:GridView>
    

    希望这有帮助。