2014-01-20 4 views
0

Spread.NET에 대한 사용자 정의 셀 유형을 만들려고합니다. 'FarPoint.Web.Spread.BaseCellType.PaintCell (문자열, System.Web.UI.WebControls.TableCell, FarPoint.Web.Spread.Appearance : 내가 오류가추상 기본 멤버를 호출 할 수 없습니다.

추상베이스 부재 호출 할 수 없습니다입니다 , FarPoint.Web.Spread.Inset, 개체, 부울) '여기

는 선언

[Serializable()] 
public class BarcodeCellType : FarPoint.Web.Spread.BaseCellType 
{ 
    public override Control PaintCell(string id, TableCell parent, Appearance style, Inset margin, object value, bool upperLevel) 
    { 
     parent.Attributes.Add("FpCellType", "BarcodeCellType"); 

     if (value != null) 
     { 
      try 
      { 
       MemoryStream ms = GenerateBarCode(value.ToString()); 
       var img = Bitmap.FromStream(ms); 
       value = img; 
      } 
      catch (Exception ex) 
      { 
       value = ex.ToString(); 
      } 
     } 

     return base.PaintCell(id, parent, style, margin, value, upperLevel); //ERROR HERE 
    } 

    private MemoryStream GenerateBarCode(string codeInfo) 
    { 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      BarCodeBuilder bb = new BarCodeBuilder(); 
      bb.CodeText = codeInfo; 
      bb.SymbologyType = Symbology.Code128; 
      bb.BarCodeImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
      return ms; 
     } 
    } 
} 
+0

기본 메소드가 가상이며 오버라이드와 동일한 서명이 있습니까? – twrowsell

+1

머리가 위로 올라가면 메모리 누수가 발생합니다. MemoryStream 및 비트 맵 인스턴스는 Dispose()를 호출하거나 "using"블록으로 래핑 한 후 정리해야합니다. –

+0

안녕하세요 mjmarsh - 내 코드를 업데이트했습니다. 이렇게하면 어떻게됩니까? – daved

답변

1

추상 클래스 "FarPoint.Web.Spread.BaseCellType"에서 PaintCell 메서드를 추상으로 정의했으며 추상 메서드 선언은 새 가상 메서드를 도입하지만 해당 메서드의 구현은 제공하지 않기 때문입니다. 대신, 비 추상 파생 클래스 ("BarcodeCellType")는 해당 메소드를 재정 의하여 자체 구현을 제공해야합니다. 추상 메소드는 실제 구현을 제공하지 않기 때문입니다.

1

PaintCell 코드를입니다 abstract하지base.PaintCell 호출을 수행 할 수 없습니다. Control 객체를 만들고 반환하는 것은 여러분의 코드에 달려 있습니다.

Control을 생성하지 않으려면 BaseCellType보다 많은 파생 클래스를 상속하고 파생 클래스 PaintCell 메서드를 재정의해야 할 수 있습니다.

-1

추상 메소드를 호출 할 수 없습니다. 파생 클래스에서 정의해야합니다.

1

기본 멤버는 추상이므로 구현이 없습니다. base.PaintCell에 대한 호출을 제거하면 코드를으로 컴파일 할 수 있지만 코드가 인 코드를 가져올 지 확실하지 않습니다.

+2

그는 자신의 오버라이드 (override)에서 반환 될 'Control'을 만드는 방법에 의존하기 때문에 컴파일되지 않을 것입니다. 나는 그가 일하기 위해 앞서 많은 일을하고 있다고 생각합니다. –

관련 문제