DropDownList ddl = new DropDownList();
后面加上:
ddl.ID = "ddl";然后在UpdateCommand中用:
DropDownList ddl = (DropDownList)e.Item.FindControl("ddl");

解决方案 »

  1.   

    用findcontrol和你的按钮没有关系。
    你还可以从你的数据源的里面来提取column的name,再用遍历的方法来对比dg里面有没有,有就取出来,没有跳过。
    只是介绍一个方法,代码试试看。
      

  2.   

    我想应该跟按钮列有关系.
    在添加模板列时改用DataGrid.Columns.AddAt(place,Column)后可以改变模板列的位置,但此时点击编辑按钮,出现指定的转换无效,我想是不是EditTemplate没有设置的关系,然后设置了EditTemplate为同样的模板列,但问题依然,只有用Add(Column)默认加在所有列之后没有问题.
    但此时采用icyer大侠的方法在模板列InstantiateIn函数中为添加的控件增加id属性,在DataGrid中的UpdateCommand事件中使用FindControl(id)后引用就会出错.
    多谢各位指点
      

  3.   

    ddl.DataTextField = ((DataRowView)container.DataItem)[dataTextField].ToString();
    ddl.DataValueField = ((DataRowView)container.DataItem)[dataValueField].ToString();
    ddl.DataBind();
    ??
    根据数据源指定要绑定的Column???
    你看到你输出的DDL有值么???
      

  4.   

    ^_^,实际上我不是这样写的,用了个笨方法:
    string data1,data2 ;
    int iTemp = ((DataRowView) container.DataItem).DataView.Table.Rows.Count;
    for (int i=0; i<iTemp; i++)
    {
    data1 = ((DataRowView) container.DataItem).DataView.Table.Rows[i][dataTextField].ToString();
    data2 = ((DataRowView) container.DataItem).DataView.Table.Rows[i][dataValueField].ToString();
    ddl.Items.Add(new ListItem(data1,data2));
    }
    然后就没有用ddl.DataBind()了,但的确得到了绑定要的效果
      

  5.   

    在Page(或其他Control)里,OnInit里,你有使用
    ((TemplateColumn)DataGrid1.Columns[i]).ItemTemplate=new DropDownListItem();么???DropDownListItem这个名字真不好。。----------------------
    把你指定ITemplate的代码帖出来吧。
      

  6.   

    如下:
    TemplateColumn tc = new TemplateColumn();
    DropDownListItem ddli = new DropDownListItem();
    ddli.DataTextField = "column3";
    ddli.DataValueField = "column3";
    tc.ItemTemplate = ddli;
    tc.EditItemTemplate  = ddli;
    DataGrid1.Columns.Add(tc);
      

  7.   

    ???
    哪里啊??
    OnInit还是???OnLoad,还是其他地方?
      

  8.   

    private void Page_Load(object sender, System.EventArgs e)
      

  9.   

    那就是啦。
    把它放到protected override OnInit(EventArgs e)
    里去。
    否则PostBack时,你的DDL什么值都没有
      

  10.   

    已经加到了OnInit中,解决了第一个问题.
    但有点不明白,指定Itemplate时不管是不是postback都有添加模板列,为什么就不行呢?
    还有个问题
    模板列InstantiateIn函数中为添加的控件增加id属性,在DataGrid中的UpdateCommand事件中使用FindControl(id)后引用就会出错:未将对象引用设置到对象的实例.
    多谢指点
      

  11.   

    DataGrid(其他复合Control也是)要呈现内容,必须做下面两事之一:
    一:根据数据源绑定DataGrid,
    二:根据ViewState恢复视图。
    LoadViewState是在OnInit后,OnLoad前执行的。
    如果你在OnLoad时才调用InstantiateIn,那么你的控件部分将不能得到恢复。你的第二个问题看情况了。。
    e.Item是DataGridItem,是INamingContainer的实现者。应该可以把你的ddl搜索出来才对的。你可能在某些细节上没有做对。
    检查你出错的地方。看看到底是什么东西为null了。。