我的datagrid里面的编辑列绑定为一个dropdownlist控件,还有编辑按钮相应事件 public void drscore_Edit(Object sender, DataGridCommandEventArgs e)<asp:TemplateColumn>
<HeaderTemplate>
<b>行业类别</b>
</HeaderTemplate>
<ItemTemplate>
<asp:Label Width="110" Text='<%# DataBinder.Eval(Container, "DataItem.block_id") %>' runat="server" ID="Label5"/>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="ddlScoreBlock" Runat="server" Width=100px></asp:DropDownList> 
</EditItemTemplate>
</asp:TemplateColumn>当我点击"修改"按钮,跳转到drscore_Edit()函数里面的时候,我用下面的方法
DropDownList ddBlock = (DropDownList)e.Item.FindControl("ddlScoreBlock");
要找到我的datagrid里面的名字为"ddlScoreBlock"的下拉框,然后给它复制,可是为什么这里找到的ddBlock是NULL呢? 找不到这个下拉框么?

解决方案 »

  1.   

    你要先获取行,再在这行内查找这控件,行的索引(e.CommandArgument),获取你那按钮可以使用
    DropDownList ddBlock = this.datagrid.Rows[Convert.ToInt32(e.CommandArgument)].FindControl("ddlScoreBlock") as DropDownList ;
      

  2.   

    或者我点击修改按钮之后,能不能在drscore_ItemDataBound(object sender, DataGridItemEventArgs e)里面触发到  if (e.Item.ItemType == ListItemType.EditItem) 的条件呢?
    我点击修改后重新绑定了一下datagrid,可是总是到不了  ListItemType.EditItem 这个地方
      

  3.   

    DropDownList ddBlock=(DropDownList)(DataGrid1.Items[e.Item.ItemIndex].Cells[3].FindControl("ddlScoreBlock")]);
      

  4.   

    报错了
    “System.Web.UI.WebControls.DataGrid”不包含“Rows”的定义,并且找不到可接受类型为“System.Web.UI.WebControls.DataGrid”的第一个参数的扩展方法“Rows”(是否缺少 using 指令或程序集引用?)
    说没有row属性?
      

  5.   


    断点跟下看看。是不是ItemDataBound事件丢了。
      

  6.   


    Rows是Gridview里的,Datagrid是Item
      

  7.   

    谢谢Zhanlixin,用了你的方法,可是找到的也是NULL,我的ddlBlock是第三列,对应的也就是Cell[2]对吧,找到的是NULL
      

  8.   

    DropDownList ddBlock=(DropDownList)(DataGrid1.Items[DataGrid1.EditItemIndex].Cells[3].FindControl("ddlScoreBlock")]);