2016-07-20 10 views
0

を同期するデータベースのテーブルでのListBoxをキープ初めて:私は私のリストボックスを埋める方法は、ときに私のフォームのロードのため、私は私が私のDBから<strong>表</strong>(<em>人</em>)のうち、それを埋める<strong>のListBox</strong>(<em>listContacts</em>)(<em>DB1.mdf</em>)を持っている

class Person 
{ 
    public string Id { get; set; } 
    public string Firstname { get; set; } 
    public string Lastname { get; set; } 
} 

private void Initiation() 
    { 
     // Fill list: 
     var DB = new Database(); 
     DataTable Persons = DB.TableFromDB(strMyDBFilePath, "SELECT * FROM Person", "Person"); 
     var listP = new List<Person>() { }; 
     foreach (DataRow dr in Persons.Rows) 
      //listContacts.Items.Add(dr["Firstname"].ToString().Trim() + " " + dr["Lastname"].ToString().Trim()); 
      listP.Add(new Person() 
      { 
       Id = dr["Id"].ToString(), 
       Firstname = dr["Firstname"].ToString().Trim(), 
       Lastname = dr["Lastname"].ToString().Trim() 
      }); 
     listContacts.ItemsSource = listP; 
    } 



class Database 
{ 
    public DataTable TableFromDB(string DatabaseName, string Command, string TableName) 
    { 
     var da = new SqlDataAdapter(); 
     var ds = new DataSet(); 
     var cs = new SqlConnection(strSQLNetworkInterface + DatabaseName); 
     da.SelectCommand = new SqlCommand(Command,cs); 
     da.Fill(ds, TableName); 
     return ds.Tables[TableName]; 
    } 

    public void InsertToDB(Person Person, string TableName, string DatabaseName) 
    { 
     var da = new SqlDataAdapter(); 
     var ds = new DataSet(); 
     var cs = new SqlConnection(strSQLNetworkInterface + DatabaseName); 
     da.SelectCommand = new SqlCommand("SELECT * FROM " + TableName, cs); 

     da.Fill(ds, TableName); 
     DataRow dr = ds.Tables[TableName].NewRow(); 
     dr["Firstname"] = Person.Firstname; 
     dr["Lastname"] = Person.Lastname; 
     ds.Tables[TableName].Rows.Add(dr); 
     var cb = new SqlCommandBuilder(da); 
     cb.DataAdapter.Update(ds.Tables[TableName]); 
    } 
} 

テーブルPerson)にレコードを追加すると、InsertToDBを使用すると問題なく動作します。次に必要なのは、私の更新することですListBoxlistContacts)。私だけではなくでした:

listContacts.Items.Add(pNew.Firstname + " " + pNew.Lastname); 

それは、このエラーが発生します。

Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead

は今、私の質問:私のリストボックスを同期保つためのItemsSourceを使用する方法?

編集:キレネンコのヒント@に基づいて

私はこれを追加しました:

var listP = (List<Person>)(listContacts.ItemsSource); 
listP.Add(pNew); 
listContacts.ItemsSource = listP; 

をしかし、それは私ののListBoxを更新していないようです!

+0

'listPacts'ではなく' ListP'に項目を追加してください。 – Jose

+0

@Kirenenkoありがとう。上記のコードをいくつか追加しました。しかしまだ更新していない。 –

+0

MVVMパターンをチェックして、listContacts.ItemSource(ビュー内)をobservableCollection listP(ビューモデル内)にバインドします。 – Jose

答えて

関連する問題

 関連する問題