2011-11-24 2 views
0

Je développe un module de paie pour l'activité SAP 1. Je reçois toujours une erreur: "NullReferenceException was unhandled by user code :Object reference not set to an instance of an object." Lorsque j'essaie de sélectionner un élément de liste déroulante incorporé dans une cellule de colonne SAP SAP .C# Erreur: NullReferenceException n'a pas été gérée par le code utilisateur

Mon code:


public void HandleMenuEvent(ref SAPbouiCOM.MenuEvent pVal) 
{ 
    // Handle Add Menu 
    if (pVal.MenuUID == "1282") 
    { 
     _form.Freeze(true); 
     oMatrix.AddRow(); 
     _edCode.ValueEx = string.Empty; 
     _cmbEDDescription = oMatrix.Columns.Item("EDDesc").Cells.Item(oMatrix.RowCount).Specific; 

     var earnDeductDescription = Program.Kernel.Get().GetAllEarnDeductMasters().Distinct(); 

     if (_cmbEDDescription.ValidValues.Count > 0) 
     { 
      // Do nothing 
     } 
     else 
     { 
      foreach (var item in earnDeductDescription) 
      { 
       _cmbEDDescription.ValidValues.Add(item.U_PD_description, string.Empty); 
      } 
     } 

     _cmbEDDescription.Select(0, SAPbouiCOM.BoSearchKey.psk_Index); 

     var edDescValue = string.Empty; 

     edDescValue = _cmbEDDescription.Value; 

     var edCode = earnDeductDescription.Where(x => x.U_PD_description.Trim() == edDescValue.Trim()).Select(y => y.U_PD_code).SingleOrDefault(); 

     for (int i = 1; i

L'erreur se produit sur l'élément événement changé

 
#region ItemChanged 
if (pVal.ItemChanged && pVal.ColUID == "EDDesc" && pVal.Before_Action == false) 
{ 
    var earnDeductDescription = Program.Kernel.Get().GetAllEarnDeductMasters().Distinct(); 

    var edDescValue = string.Empty; 

    edDescValue = _cmbEDDescription.Selected.Value; x.U_PD_description.Trim() == edDescValue.Trim()).Select(y => y.U_PD_code).SingleOrDefault(); 

    for (int i = 1; i

C'est là que j'attache une source de données d'utilisateur à la colonne SAP

 
private void BindMatrixToUserDataSource() 
{ 
    // Get main matrix 
    oItem = _form.Items.Item("JournalMat"); 
    oMatrix = oItem.Specific; 

    _edDescription = _form.DataSources.UserDataSources.Add("EDDesc", SAPbouiCOM.BoDataType.dt_SHORT_TEXT, 30); 
    oColumns = oMatrix.Columns; 
    _coledDescription = oColumns.Item("EDDesc"); 
    _coledDescription.DataBind.SetBound(true, "", "EDDesc"); 

    ...some code 
} 

Quelqu'un peut-il m'aider à résoudre ce problème?

+2

Soit '_cmbEDDescription' est' null', soit '_cmbEDDescription.Selected' est. Parcourez le code pour savoir lequel et pourquoi. –

+1

Mis à part le problème que vous rencontrez, il semble * que vous ne soyez pas sûr de ce que veut dire 'ref', étant donné que vous ne l'utilisez pas vraiment * dans votre première méthode. S'il vous plaît lire http://pobox.com/~skeet/csharp/parameters.html –

+0

Merci Jon Skeet, comme toujours, vous êtes utile. Excellent article. –

Répondre

1

Ma suggestion est que _cmbEDDescription.Selected est nulle à ce moment, car aucun élément n'est sélectionné dans la zone de liste déroulante. Vous pouvez changer votre code comme ceci:

var edDescValue = _cmbEDDescription.Selected == null ? string.Empty : _cmbEDDescription.Selected.Value; 
Questions connexes