2013-11-26 27 views
0

我有一個窗體(編輯)與一些文本控件作爲私人成員與我想從另一個類(PatientService)訪問的公共屬性,我無法弄清楚如何克服「文本框不存在於當前的上下文中「我嘗試訪問的8個控件的錯誤。另外,通過構造函數傳遞這些值是一個很好的方法嗎?除了與數據庫交互的PatientService類外,我不能讓我的項目的任何其他部分。感謝和有問題的文本框以粗體顯示。如何從不同的課程訪問這些控件?

public partial class Edit : XtraForm 

    { 
     private string patientID; 
     private string firstName; 
     private string lastName; 
     private string address; 
     private string city; 
     private string state; 
     private string zipCode; 
     private string phone; 

     public Edit(string PatientID, string FirstName, string LastName, string Address, string City, string State, string ZipCode, string Phone) 
     { 
      InitializeComponent(); 
      patientID = txtPatientID.Text; 
      firstName = txtFirstName.Text; 
      lastName = txtLastName.Text; 
      address = txtAddress.Text; 
      city = txtCity.Text; 
      state = txtState.Text; 
      zipCode = txtZipCode.Text; 
      phone = txtPhone.Text; 

     } 

     public string PatientID 
     { 

      get { return patientID; } 
      set { patientID = value; } 


     } 
     public string FirstName 
     { 

      get { return firstName; } 
      set { firstName = value; } 

     } 
     public string LastName 
     { 

      get { return lastName; } 
      set { lastName = value; } 

     } 
     public string Address 
     { 

      get { return address; } 
      set { address = value; } 

     } 
     public string City 
     { 

      get { return city; } 
      set { city = value; } 

     } 
     public string State 
     { 

      get { return state; } 
      set { state = value; } 

     } 
     public string ZipCode 
     { 

      get { return txtZipCode.Text; } 
      set { txtZipCode.Text = value; } 

     } 
     public string Phone 
     { 

      get { return phone; } 
      set { phone = value; } 

     } 

public void CreatePatient() 
      { 

       //SAConnection conn = new SAConnection("dsn={SQL Anywhere 10};uid=dba;pwd=sql;databasefile=C:\\Users\\Kbaker1\\Desktop\\Training1.db;"); 
       //SACommand cmd = new SACommand("INSERT INTO patient(patient_id, first_name, last_name, address, city, state, zipcode, phone) VALUES(); "); 

       using (SAConnection conn = new SAConnection()) 
       { 
        conn.ConnectionString = "dsn={SQL Anywhere 10};uid=dba;pwd=sql;databasefile=C:\\Users\\Kbaker1\\Desktop\\Training1.db;"; 
        conn.Open(); 

        using (SACommand cmd = conn.CreateCommand()) 
        { 
         cmd.CommandText = 
         "insert into patient(\n" + 
         " patient_id,\n" + 
         " first_name,\n" + 
         " last_name,\n" + 
         " address,\n" + 
         " city,\n" + 
         " state,\n" + 
         " zipcode,\n" + 
         " phone)\n" + 
         " values(\n" + 
         " @prm_patient_id,\n" + 
         " @prm_first_name,\n" + 
         " @prm_last_name,\n" + 
         " @prm_address,\n" + 
         " @prm_city,\n" + 
         " @prm_state,\n" + 
         " @prm_zipcode,\n" + 
         " @prm_phone)"; 

cmd.Parameters.Add("@prm_patient_id", SADbType.VarChar, 80).Value = **txtPatientID.Text**; 
cmd.Parameters.Add("@prm_first_name", SADbType.VarChar, 80).Value = **txtFirstName.Text**; 
cmd.Parameters.Add("@prm_last_name", SADbType.VarChar, 80).Value = **txtLastName.Text**; 
cmd.Parameters.Add("@prm_address", SADbType.VarChar, 80).Value = **txtAddress.Text**; 
cmd.Parameters.Add("@prm_city", SADbType.VarChar, 80).Value = **txtCity.Text**; 
cmd.Parameters.Add("@prm_state", SADbType.VarChar, 80).Value = **txtState.Text**; 
cmd.Parameters.Add("@prm_zipode", SADbType.VarChar, 80).Value = **txtZipCode.Text**; 
cmd.Parameters.Add("@prm_phone", SADbType.VarChar, 80).Value = **txtPhone.Text**; 

        cmd.ExecuteNonQuery(); 

        } 
       } 
      } 

好的,所以我還是有點困惑。我製作了Patient類並在Edit窗體中實例化它,就像這樣。

public Patient pat;

public Edit(Patient patient) 
    { 
     InitializeComponent(); 
     pat = patient; 
    } 

我想要得到它,當我點擊「確定」按鈕,文本框控件通過在PatientService類CreatePatient方法插入到數據庫中。

下面是從編輯表單調用該CreatePatient方法在PatientService類中的方法:

私人無效btnOK_Click(對象發件人,EventArgs的) {

 PatientService ps = new PatientService(); 
     ps.CreatePatient(); 
    } 

我的病人類看起來像:

公共類病人 {

List<Patient> patList = new List<Patient>(); 
    private string patientID; 
    private string firstName; 
    private string lastName; 
    private string address; 
    private string city; 
    private string state; 
    private string zipCode; 
    private string phone; 
    private int classificationID; 
    protected object Dispose; 

    public Patient(string PatientID, string FirstName, string LastName, string Address, string City, string State, string ZipCode, string Phone, int ClassificationID) 
    { 
     this.patientID = PatientID; 
     this.firstName = FirstName; 
     this.lastName = LastName; 
     this.address = Address; 
     this.city = City; 
     this.state = State; 
     this.zipCode = ZipCode; 
     this.phone = Phone; 
     this.classificationID = ClassificationID; 

    } 


     public string PatientId 
    { 
     get { return patientID; } 
     set { patientID = value; } 
    } 

    public string FirstName 
    { 
     get { return firstName; } 
     set { firstName = value; } 
    } 

    public string LastName 
    { 
     get { return lastName; } 
     set { lastName = value; } 
    } 

    public string Address 
    { 
     get { return address; } 
     set { address = value; } 
    } 

    public string City 
    { 
     get { return city; } 
     set { city = value; } 
    } 

    public string State 
    { 
     get { return state; } 
     set { state = value; } 
    } 

    public string ZipCode 
    { 
     get { return zipCode; } 
     set { zipCode = value; } 
    } 

    public string Phone 
    { 
     get { return phone; } 
     set { phone = value; } 
    } 

    public int ClassificationID 
    { 
     get { return classificationID; } 
     set { classificationID = value; } 

    } 

    public Patient(string PatientID) 
    { 
     this.patientID = PatientID; 
    } 

    public Patient() 
    { 

    } 

} 

}

因此,考慮到我不再像以前那樣通過Edit構造函數傳遞值,我將如何使用Patient類來獲取發送到數據庫的文本框值?

回答

1

您不需要從其他窗體或類訪問您的控件。 既然你有公共屬性,則可以從父窗體訪問它:

Edit form = new Edit(patientId, ...); 
//after using form 
string patientId = form.PatientID; 

更好的選擇是換你的字段到一個單一的對象,像實體

public class Patient 
{ 
     private string patientID; 
     private string firstName; 
     private string lastName; 
     private string address; 
     private string city; 
     private string state; 
     private string zipCode; 
     private string phone; 

     //put here your properties 
} 

用它在你的編輯形式

public partial class Edit : XtraForm 
{ 
    public Patient Patient; 

    public Edit() //empty constructor if you want to pass data manually via property 
    { 
     InitializeComponent(); 
    } 

    public Edit(Patient patient) 
    { 
     InitializeComponent(); 
     Patient = patient; 
    } 

    //full code here 
} 

您可以始終使用EditValueChanged事件形式保存Patient對象中的實際數據形成您的文本框(據我所知,您正在使用DevExpr ess控件,如XtraForm)。例如:

private void txtPatientID_EditValueChanged(object sender, EventArgs e) 
{ 
    Patient.patientId = txtPatientID.Text; 
} 
+0

我不確定「」中的字符串值應該表示什麼。代碼如下所示:Edit ed = new Edit(); ed.PatientID =「1」; ed.FirstName =「2」; ed.LastName =「3」; ed.Address =「4」; ed.City =「5」; ed.State =「6」; ed.ZipCode =「7」; ed.Phone =「8」; – user3034095

+0

太棒了,非常感謝! – user3034095

1

您需要將您的表單類傳遞給PatientService 例如:

public class PatientService 
{ 
    //your code 
    public Edit EditForm{get;set;} 
} 

現在,您可以通過編輯PatientService: 地方:

var svc = new PatientService(); 
svc.EditForm = existEditForm; 

你可以現在從病人服務訪問遊覽編輯表單。就像這樣:

EditForm.PatientId = "0"; 
+0

感謝您的幫助。我會盡力而爲! – user3034095