2011-11-18 137 views
1

我在我的winform應用程序中使用DevExpress,我有一個gridview,數據輸入窗體,datanavigator,都綁定到數據集。DevExpress DataBinding,添加新記錄

我要添加新的記錄,如果使用datanavigator「添加」它的工作好,如何使用「新記錄」按鈕,這樣做?

BindingSource.AddNew() 

不工作,它通常不會,但其DevExpress的不工作。

+0

能否請您更具體關於什麼不起作用?我剛剛使用他們的嚮導創建了一個新的DX WinForms應用程序。我將網格綁定到一個新的數據庫表。我爲調用BindingSource.AddNew()的導航欄項添加了一個事件處理程序。點擊後,會將新行添加到網格中。 –

+0

這是真的有線,我剛剛重新啓動電腦,現在一切工作正常。 –

+0

理想情況下,您應該使用某種促進關注點分離的模型。像MVVM或MVC一樣。如果你這樣做,你會有一些收集 - 一個BindingList 也許你已經綁定。如果你使用BindingList 那麼只需一個source.Add(new T())就夠了。 – Neil

回答

3

如果你想使用綁定然後用綁定源使用你的對象..

,並使用綁定列表.AddingNew += new AddingNewEventHandler(listOfParts_AddingNew); 事件中加入新的實體對象..

查看MSDN的BindingList的例子。

void listOfParts_AddingNew(object sender, AddingNewEventArgs e) 
     { 
      e.NewObject = new Part(textBox1.Text, int.Parse(textBox2.Text)); 

     } 

的DevExpress的WinForm控件的工作這麼快有約束力的來源比較類型化數據源等..你可以實現使用這些例子bindingSources ..

集的GridView和associcated控件的數據源bindsouce你有創建... 過程的形式與這個MSDN例子..

對這個代碼片段看看..可能是你會得到一些想法從這個..

private void BindingLIstDemo_Load(object sender, EventArgs e) 
     { 
      InitializeListOfEmployees(); 
      BindlstEmp(); 
      listofEmp.AddingNew += new AddingNewEventHandler(listOfEmp_AddingNew); 
      listofEmp.ListChanged += new ListChangedEventHandler(listofEmp_ListChanged); 

     } 

     private void BindlstEmp() 
     { 
      lstEmpList.Items.Clear(); 
      lstEmpList.DataSource = listofEmp; 
      lstEmpList.DisplayMember = "Name"; 

     } 

     void listofEmp_ListChanged(object sender, ListChangedEventArgs e) 
     { 
      MessageBox.Show(e.ListChangedType.ToString()); 
       //throw new NotImplementedException(); 
     } 

     //declare list of employees 
     BindingList<Emp> listofEmp; 
     private void InitializeListOfEmployees() 
     { 

      //throw new NotImplementedException(); 
      // Create the new BindingList of Employees. 
      listofEmp = new BindingList<Emp>(); 

      // Allow new Employee to be added, but not removed once committed. 
      listofEmp.AllowNew = true; 
      listofEmp.AllowRemove = true; 

      // Raise ListChanged events when new Employees are added. 
      listofEmp.RaiseListChangedEvents = true; 

      // Do not allow Employee to be edited. 
      listofEmp.AllowEdit = false; 

      listofEmp.Add(new Emp(1, "Niranjan", 10000)); 
      listofEmp .Add (new Emp (2,"Jai", 8000)); 

      } 


     // Create a new Employee from the text in the two text boxes. 
     void listOfEmp_AddingNew(object sender, AddingNewEventArgs e) 
     { 
      e.NewObject = new Emp (Convert.ToInt32(txtId.Text), txtName.Text,Convert.ToInt32(txtSalary.Text)); 

     } 

     private void btnAdd_Click(object sender, EventArgs e) 
     { 
      Emp empItem = listofEmp.AddNew(); 
      txtId.Text = txtName.Text = txtSalary.Text = ""; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Form1 obj = new Form1(); 
      obj.Show(); 
     } 

     private void btnDelete_Click(object sender, EventArgs e) 
     { 
      var sg = (from sc in listofEmp.ToList<Emp>() where sc.Name == ((Emp)lstEmpList.SelectedValue).Name select sc); 





     } 

     private void lstEmpList_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      Emp se = listofEmp[lstEmpList.SelectedIndex]; 
      txtId.Text = se.Id.ToString(); 
      txtName.Text = se.Name; 
      txtSalary.Text = se.Salary.ToString(); 

     } 

這裏我使用BindingList作爲datasouce BindingList<Emp> listofEmp;和記錄網格上市地顯示在ListBox控件..但都一樣...試試這個與你的GridView ..