2011-06-07 87 views
0

我正在進入oop的第一步,這需要對我的應用程序進行徹底刪除,並將其重新設計爲3層和麪向對象。 嘆息。我有一個提交對象,它應該包含一個客戶對象(以及一個代理和覆蓋對象);我想在每個包含的對象的字段中存儲來自數據庫的一些datareader結果,但是當我嘗試用新的提交對象調用Customer對象時,我什麼也得不到。 VS不承認提交包含一個Customer對象。我明顯錯過了一些關鍵點,所以考慮到這一點,想法?下面的代碼。在另一個C#類中創建一個對象?

//This is the Submission class here 
public class Submission 
{ 
    public int SubmissionId {get;set;} 
    public int Status { get; set; } 
    public string StatusComment { get; set; } 


    public class Customer 
    { 
     //public Customer() { } 
     public int CustId { get; set; } 
     public string CustName { get; set; } 
     public string CustAddress { get; set; } 
     public string CustState { get; set; } 
     public string CustCity { get; set; } 
     public int CustZip { get; set; } 
     public int SicNaic { get; set; } 

    } 

    public object Customer(); 
} 


//These lines throw an error: 

無法通過表達式引用類型。 VS無法識別TempSubmission.Customer在提交內部對Customer對象的調用。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data; 
using System.Data.SqlClient; 


/// This query should selects the relevant data for a gridview on the presentation layer and stores in a list. 
/// Don't quite know how to bind it to the gridview yet, but that's a different question. 

public class SubmissionDatabaseService 
{ 
    public List<Submission> GetAllSubmissions() 
    { 
     string Searchstring = "SELECT Submission.SubmissionId, Customer.CustName, Customer.CustCity, Customer.CustState, Broker.BroName, Broker.BroState, Broker.EntityType, Submission.Coverage, Status.Status FROM Submission INNER JOIN Broker ON Broker.BroId = Submission.BroId INNER JOIN Customer ON Customer.CustId = Submission.CustId INNER JOIN Status ON Status.StatusId = Submission.StatusId"; 
     string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;   
     SqlConnection conn = new SqlConnection(connectionString); 

     SqlDataReader dr = null; 

     try 
     { 
      conn.Open(); 

      SqlCommand Searchcmd = new SqlCommand(Searchstring, conn); 

      dr = Searchcmd.ExecuteReader(); 
      List <Submission> lstSubmission; 
      Submission tempSubmission; 
      while (dr.Read()) 
      { 
       tempSubmission = new Submission(); 
       tempSubmission.SubmissionId = dr.GetInt32(0); 
       tempSubmission.Customer.CustName = dr.GetString(1); 
       tempSubmission.Customer.CustCity = dr.GetString(2); 
       tempSubmission.Customer.CustState = dr.GetString(3); 
       tempSubmission.Broker.BroName = dr.GetString(4); 
       tempSubmission.Broker.BroState = dr.GetString(5); 
       tempSubmission.Broker.EntityType = dr.GetString(6); 
       tempSubmission.SubmissionCoverage.Coverage = dr.GetInt32(7); 
       tempSubmission.Status = dr.GetInt32(8); 

       //Add rest of the fields 
       lstSubmission.Add(tempSubmission); 
      } 
     } 

     return lstSubmission; 
    } 
} 
+0

嘗試使用聲明移動到頂部 – Grozz 2011-06-07 19:29:01

+0

目前你的客戶定義爲一個內部類的提交而這並不是我想你想。您希望客戶成爲提交之後的頂級課程,並且提交內容需要參考客戶實例。 – ribram 2011-06-07 19:29:37

回答

6

Ooo ..從哪裏開始?把你的客戶類它自己的文件Customer.cs,並在其自己的文件Submission.cs您所提交的類

然後,你可以做一個簡單的提交類,像這樣:

public class Submission 
{ 
     // consider implementing the below as properties to more finely control access 
     public int SubmissionId; 
     public int Status; 
     public string StatusComment; 
     public Customer SubmissionCustomer; // <-- this is null until you set it to a Customer object, either in the constructor or externally. 

     public Submission() { 
      // constructor 
     } 

} 

然後在屬性念起來建設者,並將它們灑在你認爲合適的地方。請參閱:

http://msdn.microsoft.com/en-us/library/x9fsa0sw(v=vs.80).aspx

性能有私人/公共模式。至於構造函數:

參見:

http://msdn.microsoft.com/en-us/library/ace5hbzh.aspx

構造函數的調用,只要你創建一個類的實例(對象)。

+0

您將成員添加爲公共字段,屬性可能是更好的選擇。 – 2011-06-07 19:35:08

+0

同意,只是想保持簡單開始;)Brazos - 使用屬性。 – mikey 2011-06-07 19:35:59

+0

謝謝,@Mikey。那是我需要的。如此多的信息,當你不知道正確的問題時很難找到正確的東西,你知道嗎? – 2011-06-07 19:46:48

0

只需在提交內定義客戶對象,不會使提交包含客戶的實例。對於您想要執行的操作,只需將「客戶」提交到「提交」外並在「提交」中定義「客戶」屬性。

0

您正試圖通過tempSubmission參考實際類型Customer。您必須改爲參考Customer的實例,該實例將通過某個物業或類似物品展示。

0

問題是您的客戶類型不夠具體,它被定義爲對象而不是客戶。

達到你想要做的,你將不得不在這種情況下Customer類型的屬性添加一個新成員到您Submission類,你public object Customer();做了什麼基本meams,定義一個名爲類型的對象Customer方法。

,你會想要做的是確定什麼,例如RelatedCustomer

Public Customer RelatedCustomer{get;set;} 
1

我想你想要什麼是Customer類是提交類之外,爲被叫Customer類型的屬性提交類包含Customer的一個實例。

public class Submission 
{ 
    public Submission() 
    { 
     this.Customer = new Customer(); 
    } 

    public int SubmissionId { get; set; } 
    public int Status { get; set; } 
    public string StatusComment { get; set; } 
    public Customer Customer { get; set; } 
} 
public class Customer 
{ 
    //public Customer() { } 
    public int CustId { get; set; } 
    public string CustName { get; set; } 
    public string CustAddress { get; set; } 
    public string CustState { get; set; } 
    public string CustCity { get; set; } 
    public int CustZip { get; set; } 
    public int SicNaic { get; set; } 
} 
相關問題