2015-04-22 2 views
-1

У меня есть следующие:Получение класса свойство при чтении из базы данных

using (SqlCommand cmd2 = new SqlCommand("", dbCon)) 
       { 
        cmd2.CommandText = @" 
         SELECT [PCMF04_PCBPocketName_N] 
         ,[PCMF01_PcbConnectorName_N] 
         ,[PCMF03_PCBHeaderName_N] 
         ,[PCMF04_KeyIndex_C] 
         ,[PCMF04_SortOrder_R] 
         FROM [ArdSqlDev].[dbo].[WPCMF04_PCBPocket] 
         WHERE 
          PCMF03_PCBHeaderName_N = @PCMF03_PCBHeaderName_N 
         Order By 
          PCMF04_PCBPocketName_N"; 

        cmd2.Parameters.Add("@PCMF03_PCBHeaderName_N", SqlDbType.NVarChar).Value = header.HeaderName; 

        using (SqlDataReader dr = cmd2.ExecuteReader()) 
        { 

         while (dr.Read()) 
         { 
          var pocket = new PcbPocket(dr.GetString(0)); 
          pocket.PocketName = dr.GetString(0); 
          pocket.PcbConnector.ConnectorName = dr.GetString(1); 
          pocket.KeyIndex = dr.GetString(3); 
          pocket.SortOrder = dr.GetInt32(4); 
          header._PcbHeaderPockets.Add(pocket); 
         } 

         return header; 
        } 
       } 

Я получаю ошибку на линии:

pocket.PcbConnector.ConnectorName = dr.GetString(1); 

Ошибка:

Error 2 Property or indexer 'PcbConnector.ConnectorName' cannot be assigned to -- it is read only

Карманный Класс

public partial class PcbPocket : IEquatable<PcbPocket>, IComparable<PcbPocket>, IComparable 
     { 
     public PcbPocket(string PocketName) 
     { 
      _PocketName = PocketName;    
     } 

     private string _PocketName = string.Empty; 
     public string PocketName 
     { 
      get { return _PocketName; } 
      set { _PocketName = value; } 
     } 

     private string _KeyIndex = string.Empty; 
     public string KeyIndex 
     { 
      get { return _KeyIndex; } 
      set { _KeyIndex = value; } 
     } 

     private int _SortOrder = 0; 
     public int SortOrder 
     { 
      get { return _SortOrder; } 
      set { _SortOrder = value; } 
     } 

     private PcbConnector _PcbConnector = null; 
     public PcbConnector PcbConnector 
     { 
      get { return _PcbConnector; } 
      set { _PcbConnector = value; } 
     } 

Разъем Класс

общественный частичный класс PcbConnector: IEquatable, IComparable, IComparable {

private Collections.PcbConnectorPinList _PcbConnectorPins = new Collections.PcbConnectorPinList(); 
    public Collections.PcbConnectorPinList PcbConnectorPins 
    { 
     get 
     { 
      return _PcbConnectorPins; 
     } 
     set 
     { 
      _PcbConnectorPins = value; 
     } 
    } 

    public PcbConnector(string connectorName) 
    { 
     _ConnectorName = connectorName;  
    } 

    public PcbConnector(PcbConnector pcbConnector) 
    { 
     _ConnectorName = pcbConnector.ConnectorName; 
     _Height = pcbConnector.Height; 
     _Width = pcbConnector.Width; 
     _Active = pcbConnector.Active;   
     _Supplier = pcbConnector.Supplier; 
    } 


    private string _ConnectorName = string.Empty; 
    public string ConnectorName 
    { 
     get { return _ConnectorName; } 
    } 

    private string _Supplier = string.Empty; 
    public string Supplier 
    { 
     get { return _Supplier; } 
     set { _Supplier = value; } 
    } 


    private float _Height = 0; 
    public float Height 
    { 
     get { return _Height; } 
     set { _Height = value; } 
    } 

    private float _Width = 0; 
    public float Width 
    { 
     get { return _Width; } 
     set { _Width = value; } 
    } 

    private bool _Active = true; 
    public bool Active 
    { 
     get { return _Active; } 
     set { _Active = value; } 
    } 

PcbPocket и PbcConnector классы. ConnectorName является свойством класса PbcConnector. Если я проигнорирую эту строку, это значение будет равно null, что не является тем, что сохраняется в базе данных, и даст мне ссылку на объект, а не заданную ошибку. Есть ли способ получить значение ConnectorName для отображения в моем datagridview (в другом файле/форме)?

+2

это помогло бы показать класс' PcbPocket' и в зависимости от того класс 'PcbPocket.PcbConnector'. – Jonesopolis

+1

'PcbPocket.PcbConnector.ConnectorName' - свойство' ReadOnly' или 'get-only': i.e не имеет прикрепленного к нему' set'. Вероятно, существует конструктор для 'PcbPocket' или' PcbPocket.PcbConnector', который делает то, что вы хотите. Или, может быть, 'PcbPocket.PcbConnector.SetConnectorName' и т. Д. –

+0

также вы создаете новый экземпляр PcbConnector, как вы сказали, это класс – mjroodt

ответ

0

вы не сеттера на вашем PcbConnector:

private string _ConnectorName = string.Empty; 
public string ConnectorName 
{ 
    get { return _ConnectorName; } 
} 

вы хотите:

private string _ConnectorName = string.Empty; 
public string ConnectorName 
{ 
    get { return _ConnectorName; } 
    set { _ConnectorName = value; } 
} 

с тем, что, следует отметить, что свойства могут быть автоматически, если вы не обеспокоены их значением по умолчанию. Например, у вас есть:

private int _SortOrder = 0; 
public int SortOrder 
{ 
    get { return _SortOrder; } 
    set { _SortOrder = value; } 
} 

это то же самое, как

public int SortOrder { get; set; } 

в качестве значения по умолчанию int «s является 0 или иначе

0

Посмотрите на PcbConnector класс. Измените его, как этот

class PcbConnector 
{ 
    // Now 
    public string ConnectorName {get; private set;} 

    // Update this to 
    public string ConnectorName {get; set;} // makes the set public 
} 
Смежные вопросы