none
請問別的form怎麼更新另一個form裡datagridview的資料 RRS feed

  • 問題

  •  

    請問別的form怎麼更新另一個form裡datagridview的資料

     

    主要的Form 名為Form1裡有一個Datagridview供使用者修改資料用

     

    但希望能有第二個form叫做Form2設定完條件之後就對Datagridview裡的資料作自動更動

     

    我不知道怎麼在Form2裡存取Form1 dataridview裡的資料

     

    希望各位專家能幫幫我

     

    謝謝

    2008年7月21日 上午 08:20

所有回覆

  • 只是範例, 請自行體會吸收.

     

    public class Form1 : System.Windows.Forms.Form

    {

    private DataGridView dgvData = new DataGridView();

    ...

    ...

     

    //方法一, 將(Form1)該表單內的DataGridView往外推, 讓大家可以直接操作

    public DataGridView MyData

    { get { return this.dgvData;} }

     

    //方法二, 提供外界對本表單的互動方法

    public void SetData(params ...)

    {

    //to do something

    this.dgvData=....

    }

     

    private void LaunchFrom2()

    {

    Form2 form2 = new Form2(this);

    form2.ShowDialog();

    }

    }

     

    public class Form2 : System.Windows.Forms.Form

    {

    private Form1 syncForm = null;

     

    //要求要載入Form2 一定得提供對映載入的父表單(Form1)為誰, 待等等使用父表單所提供之方法進行回報

    public Form2(Form1 form)

    {

    this.syncForm = form;

    }

    public void Process()

    {

    //使用父表單所提供之方法進行資料處理

    this.syncForm.SetData(params...);

     

    // 或者使用Form1所提供外顯的資料表操作

    // this.syncForm.MyData = ...

    }

    }

     

    2008年7月21日 上午 08:48
  • 謝謝您的回答,有個方向可以努力

    我會努力參透的

    不懂再來請教

    謝謝 

    2008年7月23日 上午 03:20
  • 這是陳年老題,但你的是List比較複雜一點,但其實都是一樣.

    大家都在問怎麼FormA Binding 到FormB.

    說簡單一點就是二個Form的Control Binding 到同一DataSource 就好了.

    接著怎麼這個DataSource 二方都可見,這就很多技術.

    1.用靜態變數.

    2.用Application 全遇變數.

    3.用方法參數去傳.

    4.用事件通知去傳.

    接著是同步問題,怎麼FormA改,FormB也會改.

    1.單一值轉換,DataSource要實作INotifyPropertyChanged,當值有改變時他會產生這個事件,所有Binding Control 會接收這個通知去改變UI.

    2.List 值轉換,你還要實作INotifyCollectionChanged,這告訴其它Control 說我的List裡面有做Add,Remove,Delete...讓List 數量變動的事件.

     

    ADO.NET 我是不清楚怎麼做,但應該有一個List的階層有實作這樣的功能.我在做都會將資料轉企業物件後在Binding 到UI,以前我都用ObservableCollection<(Of <(T>去做企業物件,現在用LINQ技術我用BindingList<T> 比較多.

     

    2008年7月23日 上午 03:58