重绑定后dgSinger的数据源已指向了新引用才有了DropDownList,
在原e.Item的位置没有DropDownList啊
所以这样改public void dgSinger_Edit(Object sender, DataGridCommandEventArgs e) 
     { dgSinger.EditItemIndex = e.Item.ItemIndex;
Bind_dgSinger();

DropDownList DDLEditArea=(DropDownList)(dgSinger.Items[e.Item.ItemIndex].FindControl("DDLEditArea"));
Db AreaList=new Db();
string GetAreaSql = "select AreaID,Area From FF_Area";
OleDbDataReader ValueList=AreaList.GetList(GetAreaSql);
while (ValueList.Read())
{
ListItem clist = new ListItem(ValueList.GetString(1),ValueList.GetInt32(0).ToString());
DDLEditArea.Items.Add(clist); 
         } 
ValueList.Close();
}

解决方案 »

  1.   

    You can do this like below
    -----------------------------------------------------------
    /// <summary>
    /// Edit按钮按下,进入修改模式
    /// </summary>
    private void viewAdminGrid_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    viewAdminGrid.EditItemIndex = e.Item.ItemIndex;
    BindGrid(); //加载所有角色
    DropDownList lst = (DropDownList)viewAdminGrid.Items[e.Item.ItemIndex].Cells[3].FindControl("lstRole");
    lst.DataSource = LoadRole();
    lst.DataBind(); //获取原角色
    DataView view = (DataView)Session["ds"];
    string oldRole = view.Table.Rows[e.Item.ItemIndex]["ROLE"].ToString();

    //将DropDownList的选中项设为原角色
    Helper.SetListSelectedItem(lst,oldRole);
    }/// <summary>
    /// 获取所有角色
    /// </summary>
    /// <returns>所有角色,保存于ArrayList对象中</returns>
    private ArrayList LoadRole()
    {
    MSBANK.BLL.AdminManagement bll = new MSBANK.BLL.AdminManagement();
    return bll.GetRoleDescriptions();
    }
      

  2.   

    DropDownList DDLEditArea=(DropDownList)(e.Item.FindControl("DDLEditArea"));
    Db AreaList=new Db();
    string GetAreaSql = "select AreaID,Area From FF_Area";
    OleDbDataReader ValueList=AreaList.GetList(GetAreaSql);
    while (ValueList.Read())
    {
    ListItem clist = new ListItem(ValueList.GetString(1),ValueList.GetInt32(0).ToString());
    DDLEditArea.Items.Add(clist); 
    这段话放到ItemDataBound事件里并加上
    if(e.ItemType==ListItemType.Edit)
             } 
    ValueList.Close();