2017-04-24 6 views
0

私は更新ボタンを押した後、WinGridViewの更新に問題があります。 INotifyPropertyChangedプロパティを使用してBindingListを使用しています。そして、まだ私のgridviewを更新させることができません。以下はWingridviewをBindingListで更新する

は私の短いテストプログラムからのコードです:

public Form1() 
    { 
     InitializeComponent(); 

     //create BindingList 
     using(SqlConnection connection = new SqlConnection(SQLconnectionString)) 
     { 
      connection.Open(); 
      using(SqlCommand command = new SqlCommand(SelectCustomer, connection)) 
      { 
       using (SqlDataReader reader = command.ExecuteReader()) 
       { 
        while (reader.Read()) 
        { 
         customerList.Add(new Customers(reader["CntId"].ToString(), reader["Name"].ToString(), reader["Surname"].ToString())); 
        }   
       } 
      } 
     } 

     customersBindingSource = new BindingSource(customerList, null); 
     ugv_contacts.DataSource = customersBindingSource; 

    } 

    //update button 
    private void btn_UpdateCustomer_Click(object sender, EventArgs e) 
    { 
     using (SqlConnection conDataBase = new SqlConnection(SQLconnectionString)) 
     { 
      try 
      { 
       conDataBase.Open(); 
       SqlCommand updateCommand = conDataBase.CreateCommand(); 
       updateCommand.CommandText = UpdateCustomerDet; 

       updateCommand.Parameters.AddWithValue("@CntId", Customer_Id); 
       updateCommand.Parameters.AddWithValue("@CntSurname", txt_surname.Text); 
       updateCommand.Parameters.AddWithValue("@CntName", txt_name.Text); 

       SqlDataReader myReader; 
       myReader = updateCommand.ExecuteReader(); 

       customersBindingSource.ResetBindings(false); 

      } 
      catch (Exception ex) //v primeru napake se izvede to 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 

    public class Customers : INotifyPropertyChanged 
    { 
     public Customers(string id, string surname, string name) 
     { 
      CntId = id; 
      Name = name; 
      Surname = surname; 
     } 

     private string id; 
     private string surname; 
     private string name; 

     public string CntId { get { return id; } set { id = value; NotifyPropertyChanged("CntId"); } } 
     public string Surname { get { return surname; } set { surname = value; NotifyPropertyChanged("Surname"); } } 
     public string Name { get { return name; } set { name = value; NotifyPropertyChanged("Name"); } } 


     public event PropertyChangedEventHandler PropertyChanged; 

     private void NotifyPropertyChanged(string p) 
     { 
      if (PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(p)); 

     }   
    } 

は、誰かがそれthrought行ってくださいと私はそれが間違って何をやっている私に言ってもらえますか?私は検索し、多くのstackoverflowの質問をテストし、まだ正常に動作するように私のコードを作ることができませんでした。

+1

お客様は、お客様のプロパティを変更したコードを掲載していません。 – LarsTech

+0

私は何も持っていないからです。 :)これは私にとって初めてのことなので、私はこのコンセプトを理解するのに困っています。私はさらに進んでいかなければなりませんか?ありがとうございます – Urban

+0

ボタンの更新で変更します。それはあなたが念頭に置いていることですか? – Urban

答えて

0

私はいくつかのものを試しています。私が挿入/削除または更新を行っているときに私がundestandを正しく実行するには、SQLデータを変更してバインディングリストを変更する必要があります。

private void ultraButton1_Click(object sender, EventArgs e) 
    { 
     using (SqlConnection conDataBase = new SqlConnection(SQLconnectionString)) 
     { 
      try 
      { 
       conDataBase.Open(); 
       SqlCommand insertCommand = conDataBase.CreateCommand(); 
       insertCommand.CommandText = InsertCustomerDet; 

       insertCommand.Parameters.AddWithValue("@CntSurname", txt_surname.Text); 
       insertCommand.Parameters.AddWithValue("@CntName", txt_name.Text); 
       insertCommand.Parameters.AddWithValue("@CntStatus", true); 

       SqlDataReader myReader; 
       myReader = insertCommand.ExecuteReader(); 

      } 
      catch (Exception ex) //v primeru napake se izvede to 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

     customerList.Clear(); 
     customersBindingSource = new BindingSource(GetBindingList(), null); 
     ugv_contacts.DataSource = customersBindingSource; 
    } 

[削除]ボタン:

private void btn_UpdateCustomer_Click(object sender, EventArgs e) 
    { 
     UltraGridRow row = ugv_contacts.ActiveRow; 
     Customers cust = customerList[row.Index]; 

     cust.Name = txt_name.Text; 
     cust.Surname = txt_surname.Text; 


     using (SqlConnection conDataBase = new SqlConnection(SQLconnectionString)) 
     { 
      try 
      { 
       conDataBase.Open(); 
       SqlCommand updateCommand = conDataBase.CreateCommand(); 
       updateCommand.CommandText = UpdateCustomerDet; 

       updateCommand.Parameters.AddWithValue("@CntId", Customer_Id); 
       updateCommand.Parameters.AddWithValue("@CntSurname", txt_surname.Text); 
       updateCommand.Parameters.AddWithValue("@CntName", txt_name.Text); 

       SqlDataReader myReader; 
       myReader = updateCommand.ExecuteReader(); 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 
    } 

(私は、全体のDataGridViewを再バインド別の解決策を見つけることができませんでした)ボタンを追加します。

は、これまでのところ私はこの

更新]ボタンがあります。

private void btn_delete_Click(object sender, EventArgs e) 
    { 
     UltraGridRow row = ugv_contacts.ActiveRow; 
     Customers cust = customerList[row.Index]; 

     if (cust != null) 
     { 
      customerList.Remove(cust);    
     } 

     using (SqlConnection conDataBase = new SqlConnection(SQLconnectionString)) 
     { 
      try 
      { 
       conDataBase.Open(); 
       SqlCommand deleteCommand = conDataBase.CreateCommand(); 
       deleteCommand.CommandText = DeleteCustomerDet; 

       deleteCommand.Parameters.AddWithValue("@CntId", Customer_Id); 

       SqlDataReader myReader; 
       myReader = deleteCommand.ExecuteReader(); 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
     } 

    } 

bindinglistの追加や削除のためのより良い孤立はありますか?更新は関数INOTifyPropertyChangedで正常に機能します。

関連する問題