前台代码: < 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");//................... } 其他的事件和一般情况下的差不多。没有什么值得做个笔记的。