2017-08-24 37 views
0

我正在使用Windows窗體應用程序中的WCF服務。我的WCF服務有兩個類,稱爲FulltimeEmployeeParttimeEmployee。我想通過基於員工類型的Windows Fomr應用程序使用Wcf服務將用戶註冊到Sql數據庫。用戶類型將來自em type類型,但我不能編譯它,並顯示以下錯誤...Windows窗體應用程序中的無效操作異常

此兩行無效的操作異常,它也說由ListControl的屬性成員的獲取或設置值..

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
     { 

      if (comboBox2.SelectedValue =="-1")//Error in this line 
      { 
       txtHourlyPay.Visible = false; 
       txtHoursWorked.Visible = false; 
       label6.Visible = false; 
       label7.Visible = false; 

      } 
      else if (comboBox2.SelectedValue =="1")//Error on this line 
      { 

       txtHourlyPay.Visible = true; 
       txtHoursWorked.Visible = true; 
       label6.Visible = true; 
       label7.Visible = true; 

      } 
     } 

這裏是代碼全職和PARTTIME Employee類..

[DataContract] 
public class FullTimeEmployee : Employee 
{ 
    public int AnnualSalary { get; set; } 
} 

[DataContract] 
public class PartTimeEmployee : Employee 
{ 
    public int HourlyPay { get; set; } 
    public int HoursWorked { get; set; } 
} 

下面是代碼形式類..

[KnownType(typeof(FullTimeEmployee))] 
    [KnownType(typeof(PartTimeEmployee))] 
    [DataContract(Namespace = "http://pragimtech.com/Employee")] 
    public class Employee 
    { 
     private int _id; 
     private string _name; 
     private string _gender; 
     private DateTime _dateOfBirth; 

     [DataMember(Order = 1)] 
     public int Id 
     { 
      get { return _id; } 
      set { _id = value; } 
     } 

     [DataMember(Order = 2)] 
     public string Name 
     { 
      get { return _name; } 
      set { _name = value; } 
     } 

     [DataMember(Order = 3)] 
     public string Gender 
     { 
      get { return _gender; } 
      set { _gender = value; } 
     } 

     [DataMember(Order = 4)] 
     public DateTime DateOfBirth 
     { 
      get { return _dateOfBirth; } 
      set { _dateOfBirth = value; } 
     } 

     [DataMember(Order = 5)] 
     public EmployeeType Type { get; set; } 
    } 

    public enum EmployeeType 
    { 
     FullTimeEmployee = 1, 
     PartTimeEmployee = 2 
    } 
} 

這裏是WCF服務代碼基於類型註冊員工:

public void SaveEmployee(Employee employee) 
{ 
    string cs = ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString; 

    using (SqlConnection con = new SqlConnection(cs)) 
    { 
     SqlCommand cmd = new SqlCommand("spSaveEmployee", con); 
     cmd.CommandType = CommandType.StoredProcedure; 

     SqlParameter parameterId = new SqlParameter 
       { 
        ParameterName = "@Id", 
        Value = employee.Id 
       }; 
     cmd.Parameters.Add(parameterId); 

     SqlParameter parameterName = new SqlParameter 
       { 
        ParameterName = "@Name", 
        Value = employee.Name 
       }; 
     cmd.Parameters.Add(parameterName); 

     SqlParameter parameterGender = new SqlParameter 
       { 
        ParameterName = "@Gender", 
        Value = employee.Gender 
       }; 
     cmd.Parameters.Add(parameterGender); 

     SqlParameter parameterDateOfBirth = new SqlParameter 
       { 
        ParameterName = "@DateOfBirth", 
        Value = employee.DateOfBirth 
       }; 
     cmd.Parameters.Add(parameterDateOfBirth); 

     SqlParameter parameterEmployeeType = new SqlParameter 
       { 
        ParameterName = "@EmployeeType", 
        Value = employee.Type 
       }; 
     cmd.Parameters.Add(parameterEmployeeType); 

     if (employee.GetType() == typeof(FullTimeEmployee)) 
     { 
      SqlParameter parameterAnnualSalary = new SqlParameter 
        { 
         ParameterName = "@AnnualSalary", 
         Value = ((FullTimeEmployee)employee).AnnualSalary 
        }; 
      cmd.Parameters.Add(parameterAnnualSalary); 
     } 
     else 
     { 
      SqlParameter parameterHourlyPay = new SqlParameter 
        { 
         ParameterName = "@HourlyPay", 
         Value = ((PartTimeEmployee)employee).HourlyPay, 
        }; 
      cmd.Parameters.Add(parameterHourlyPay); 

      SqlParameter parameterHoursWorked = new SqlParameter 
        { 
         ParameterName = "@HoursWorked", 
         Value = ((PartTimeEmployee)employee).HoursWorked 
        }; 
      cmd.Parameters.Add(parameterHoursWorked); 
     } 

     con.Open(); 
     cmd.ExecuteNonQuery(); 
    } 
} 

下面是Windows窗體應用程序代碼:

private void button1_Click(object sender, EventArgs e) 
{ 
    MyService.HalifaxServiceClient myservice = new MyService.HalifaxServiceClient("NetTcpBinding_IHalifaxService"); 

    MyService.Employee employee = null; 

    if (((MyService.EmployeeType)Convert.ToInt32(comboBox2.SelectedValue)) == MyService.EmployeeType.FullTimeEmployee) 
    { 
     employee = new MyService.FullTimeEmployee 
        { 
         Id = Convert.ToInt32(textBox1.Text), 
         Name = txtName.Text, 
         Gender = comboBox1.Text, 
         DateOfBirth = Convert.ToDateTime(txtDateOfBirth.Text), 
         Type = MyService.EmployeeType.FullTimeEmployee(comboBox2.SelectedValue),//Error 
         AnnualSalary = Convert.ToInt32(txtAnnualSalary.Text), 
        }; 
     myservice.SaveEmployee(employee); 
     label8.Text = "Employee saved"; 
    } 
    else if (((MyService.EmployeeType)Convert.ToInt32(comboBox2.SelectedValue)) == MyService.EmployeeType.PartTimeEmployee) 
    { 
     employee = new MyService.PartTimeEmployee 
         { 
          Id = Convert.ToInt32(textBox1.Text), 
          Name = txtName.Text, 
          Gender = comboBox1.Text, 
          DateOfBirth = Convert.ToDateTime(txtDateOfBirth.Text), 
          Type = MyService.EmployeeType.PartTimeEmployee(comboBox2.SelectedValue),//Error 
          HourlyPay = Convert.ToInt32(txtHourlyPay.Text), 
          HoursWorked = Convert.ToInt32(txtHoursWorked.Text), 
         }; 
     myservice.SaveEmployee(employee); 
     label8.Text = "Employee saved"; 
    } 
    else 
    { 
     label8.Text = "Please select Employee Type"; 
    } 
} 

private void button2_Click(object sender, EventArgs e) 
{ 
    this.Close(); 
} 



private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     if (comboBox2.SelectedValue =="-1") 
     { 
      txtHourlyPay.Visible = false; 
      txtHoursWorked.Visible = false; 
      label6.Visible = false; 
      label7.Visible = false; 

     } 
     else if (comboBox2.SelectedValue =="1") 
     { 

      txtHourlyPay.Visible = true; 
      txtHoursWorked.Visible = true; 
      label6.Visible = true; 
      label7.Visible = true; 

     } 
    } 

當我點擊提交按鈕的顯示錯誤消息

並且不會將新員工插入到SQL Server數據庫中。

以下是輸出的屏幕截圖:

Click here to see the out put

請幫我糾正這個錯誤...

+0

通常情況下,如果您希望得到快速響應,請在問題中添加_bounty_而不是註釋。但我懷疑你的代表太低 – MickyD

+0

沒有..我不在網上。無論如何,我正在檢查你的答案 – Rasel

回答

1

我想你想的SelectedItem,而不是在你的組合框的SelectedValue。拿這個代碼,例如,我想模仿你的代碼:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 

     InitializeComponent(); 
     comboBox2.Items.Add(Employee.FullTimeEmployee); 
     comboBox2.Items.Add(Employee.PartTimeEmployee); 
     comboBox2.SelectedIndexChanged += ComboBox1OnSelectedIndexChanged; 
     label1.Text = "Full text: "; 
     label2.Text = "Integer value: "; 
    } 

    private void ComboBox1OnSelectedIndexChanged(object sender, EventArgs eventArgs) 
    { 
     label1.Text = "Full text: " + ((ComboBox) sender).SelectedItem; 
     label2.Text = "Integer value: " + (int)(Employee)(((ComboBox)sender).SelectedItem); 
    } 
} 

public enum Employee 
{ 
    FullTimeEmployee = 1, 
    PartTimeEmployee = 2 
} 

從那裏,你應該得到這些結果:

Two One

而且你可以在代碼中看到比較文本你可以抓住選定的項目,但獲得您需要將其轉換爲整數的整數值。希望這有助於,快樂的編碼!

+0

如何插入它,以及我必須做什麼改變成代碼??????? – Rasel

+0

當我運行它時,請選擇員工類型的顯示??????????當我點擊提交按鈕 – Rasel

+0

時,我不知道該說些什麼。當我點擊提交按鈕時,你是否可以點擊它仍然是說:請選擇消息標籤中的員工類型 – Rasel