2017-08-24 26 views
0

WindowsフォームアプリケーションでWCFサービスを使用しています。私のWCFサービスには、FulltimeEmployeeParttimeEmployeeという2つのクラスがあります。私は従業員の種類に基づいてWindows FomrアプリケーションでWcf Serviceを使用して、ユーザーをSQLデータベースに登録したいと考えています。ユーザータイプはemuタイプから来ますが、それをコンパイルして次のエラーを表示することはできません...Windowsフォームアプリケーションで無効な操作例外

この2行で無効な操作例外は、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; 

      } 
     } 

ここでフルタイムとパートタイム従業員クラスのコード..

[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

を助けてください、私はあなたのコンボボックスにSelectedValueのではない、のSelectedItemをしたいと思います。私はあなたのコードをエミュレートすると考えている、例えば、このコードを取る:

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

そして、あなたはテキストにあなたを比較するために、コード内で見ることができますが選択した項目を取得するだけでintにキャストする必要がある整数値を取得できます。これは、幸せなコーディングに役立ちますように!

+0

それを挿入する方法と私はコードにしなければならない変更??????? – Rasel

+0

まだ私はそれを実行すると、従業員のタイプを選択してくださいそのショーを表示する??????????私が送信ボタンをクリックしたとき – Rasel

+0

私は何を言うべきか分からない。送信ボタンをクリックしてもメッセージを表示しますか? – Rasel

関連する問題