前台代码: <asp:DataGrid DataKeyField="id" id="DataGrid1" runat="server" AutoGenerateColumns="False"> <Columns>//..................... <asp:TemplateColumn HeaderText="材质"> <ItemTemplate> <asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Metal") %>' ID="Label2"> </asp:Label> </ItemTemplate> <EditItemTemplate> <asp:DropDownList ID="DropDownList1" runat="server"></asp:DropDownList> </EditItemTemplate> </asp:TemplateColumn>//.....................</Columns> 后台代码: 事件ItemDataBound--这是关键事件 private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) ...{ if(e.Item.ItemType==ListItemType.EditItem) ...{ DropDownList DropDownList1=(DropDownList)e.Item.FindControl("DropDownList1"); DropDownList1.DataSource=helper1.sel("SELECT * from AT_Rating"); DropDownList1.DataTextField="cname"; DropDownList1.DataValueField="id"; DropDownList1.DataBind(); string str=Convert.ToString(DataBinder.Eval(e.Item.DataItem,"Metal")); for (int i = 0; i < DropDownList1.Items.Count; i++) if (DropDownList1.Items[i].Text == str) ...{ DropDownList1.SelectedIndex = i; } //DropDownList1.Items.FindByText(str).Selected=true;也可以用这个赋初始值 } } UpdateCommand事件: private void DataGrid1_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) ...{ int empID =Convert.ToInt16(DataGrid1.DataKeys[(int)e.Item.ItemIndex]); DropDownList DropDownList1=(DropDownList)e.Item.FindControl("DropDownList1");//................... } 其他的事件和一般情况下的差不多。没有什么值得做个笔记的。