2010-09-10 61 views

回答

0

編程:

我用下面的類(但是對於下拉列表和複選框綁定),其中實現了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 
     } 
    } 
} 

使用通過聲明你的GridView和模板列在代碼隱藏:

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> 

希望這有助於。

+0

我無法使其工作。 InstantiateIn從未被我的EditItemTemplate調用。對於ItemTemplate,它可以工作,但是...? – 2010-09-13 11:01:37

+0

原來我不得不在RowUpdating事件中重新創建grd。然後它工作。 – 2010-09-13 14:16:33