大家帮我看看下面的代码有什么问题?
<asp:TemplateColumn>
    <ItemTemplate>
<asp:DropDownList ID="Category" Runat=server DataSource='<%# GetCategory()%>'  SelectedIndex='<%#GetCategorySelectedItem((DropDownList)sender,DataBinder.Eval(Container, "DataItem.CategoryId").ToString())%>'>
</asp:DropDownList>
    </ItemTemplate>
</asp:TemplateColumn>//用于通过ID设置下拉列表框的index
protected int GetCategorySelectedItem(DropDownList ddlCategory,string iCategoryId)
{
      int i = 0;
      for(i=0;i<ddlCategory.Items.Count;i++)
if (ddlCategory.Items[i].Value == iCategoryId)
{
   break;
}
      return i;
}问题在于后台代码中我得到的DropDownList.Items.Count为0,显然是我得到的这个DropDownList不对,数据源没有问题。

解决方案 »

  1.   

    请问下面这句话中的sender不是下拉列表框吗?为什么它的count为0呢?SelectedIndex='<%#GetCategorySelectedItem((DropDownList)sender,DataBinder.Eval(Container, "DataItem.CategoryId").ToString())%>'
      

  2.   

    指向默认选项,在DataGrid1_ItemDataBound事件中去写.
    Dim mydrop As DropDownList
    mydrop = CType(e.Item.FindControl("Category"), DropDownList)
    mydrop.SelectedIndex = mydrop.Items.IndexOf(mydrop.Items.FindByValue(Convert.ToString(e.Item.Cells("CategoryId").Text)))