日期:2014-05-20  浏览次数:20439 次

DataGrid+DropDownList绑定已没问题,如何实现在编辑这一行时,DropDownList可以停在数据库里数据所处的位置?
Sub   MyDataGrid_ItemDataBound(ByVal   sender   As   Object,   ByVal   e   As   System.Web.UI.WebControls.DataGridItemEventArgs)   Handles   MyDataGrid.ItemDataBound
Dim   mg   as   new   ManageDB
Dim   DS   as   DataSet
DS=mg.GetCompanyByID(MyDataGrid.DataKeys(Cint(E.Item.ItemIndex)))

                If   e.Item.ItemType   =   ListItemType.EditItem   Then
Dim   myDropDownList   As   New   DropDownList
myDropDownList   =   CType(e.Item.FindControl( "ddlCompanyArea "),   DropDownList)
myDropDownList.DataSource   =   BindCompanyArea()
myDropDownList.DataTextField   =   "Company_Area "
myDropDownList.DatavalueField   =   "ID "
myDropDownList.DataBind()
myDropDownList.SelectedIndex=myDropDownList.Items.IndexOf(myDropDownList.Items.FindbyValue(DS.Tables(0).ROWS(0).Item( "id_company_area ").ToString))


                End   If
End   Sub

我认为问题在这一句
mg.GetCompanyByID(MyDataGrid.DataKeys(Cint(E.Item.ItemIndex)))
E.Item.ItemIndex取出值是-1,MyDataGrid.DataKeys出错

但不知道如何处理?

------解决方案--------------------
E.Item.ItemIndex为-1时是DataGrid的头,为0时才是第一行,
你把代码放到if(E.Item.ItemIndex != -1)中应该能解决
------解决方案--------------------
DataRowView rowitem = (DataRowView)e.Row.DataItem;
DropDownList clsname = (DropDownList)e.Row.FindControl( "uclassname ");
if (rowitem[ "ClassName "] != DBNull.Value)
{
clsname.Items.FindByText(rowitem[ "ClassName "].ToString()).Selected = true;
}