2016-08-05 10 views
0

私のアプリケーションには2つのウィンドウがあります。メインウィンドウにはDataGridviewが1つあり、ボタン(追加)が1つあります。ボタンをクリックすると別のウィンドウが開き、2つのテキストボックスとボタンがあります。DataGridViewはWPFのボタンクリックで値を更新しません

ウィンドウ2で、ボタンをクリックすると、テキストボックス値を送信してメインウィンドウに表示する必要がありますDataGrid

これは!2つのファイル..です

public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void btn_Add_Click(object sender, RoutedEventArgs e) 
     { 
      Window1 win = new Window1(this); 
      win.Show(); 
     } 

    } 

window1.cs

 public Window1() 
      { 
       InitializeComponent();  
      } 
      private MainWindow m = null; 
      public Window1(Window callingFrom) 
      { 
       m = callingFrom as MainWindow; 
       InitializeComponent(); 
       DataTable dt = new DataTable(); 
       dt.Columns.Add("Name"); 
       dt.Columns.Add("ID"); 
       DataRow dr = dt.NewRow(); 
       m.dataGrid1.ItemsSource = dt.DefaultView; 
       m.dataGrid1.UpdateLayout(); 
      } 
     private void btn_Click(object sender, RoutedEventArgs e) 
      { 
       DataView dv = m.dataGrid1.ItemsSource as DataView; 

       DataTable dt = dv.Table; 
       DataRow dr = dt.NewRow(); 
       dr["Name"] = txt1.Text; 
       dr["ID"] = txt2.Text; 
       dt.Rows.Add(dr); 
       // this.Close(); 
       m.dataGrid1.UpdateLayout(); 
      } 

} 

問題は時に近いWINDOW1で、再びDatagridviewに値を追加するWINDOW1を開いて、メインウィンドウのdatagrid値を追加する代わりにビューが置き換えられました!

(ウィンドウ1を閉鎖する値一つずつアップを更新している)

これを解決するにはどうすればよいです!

ありがとうございました!

+0

私は同じ質問を繰り返し、答えを無視しているのを見ています。 –

答えて

0

DataTableを新しく作成しました。空っぽです。次に、1つのアイテムを追加しました。ItemsSourceに置き換えました。新しいDataTableのビューには、まったく新しいアイテムが1つあります。

もちろん、古いアイテムはグリッドに表示されません。あなたはそれらを取り除くために多くの苦労に行きました。

このように考えてみましょう。靴には靴の入った靴箱があります。ごみをゴミ箱に投げ捨て、ゴミ箱に投げ捨て、消えてしまいます。あなたはそれをもう一度見ないでしょう。理解する:あなたが箱を投げたときに靴が箱に入っていたら、あなたはそれらの靴をもう持ちません。彼らはの中にの箱が入っていて箱がなくなっているので、靴がなくなってしまった。

次に、次の日に新しい箱を手に入れて、新しい靴を入れます。

新しい箱にはいくつの靴がありますか?ちょうど1組の靴とそのペアは、あなたがちょうど箱に入れた新しいのペアです。他の箱にあった古いペアではありません。あなたは彼らが入っていた箱を捨てたときに古いペアをゴミ箱に投げ込んだ。

あなたの車に乗って店に着いたら、車が店に到着したら、あなたは到着するそれで。車内にはが含まれているため、です。これは単なる類推に過ぎません。私はあなたが実際に捨てられた靴のペア、またはGridViewの行であることを示唆するものではありません。ややオフトピック

public class GridItem 
{ 
    public GridItem(String i, String n) 
    { 
     ID = i; 
     Name = n; 
    } 

    public String ID { get; protected set; } 
    public String Name { get; protected set; } 
} 

public partial class MainWindow : Window 
{ 
    public ObservableCollection<GridItem> GridItems { get; private set; } 

    public MainWindow() 
    { 
     InitializeComponent(); 

     GridItems = new ObservableCollection<GridItem>(); 

     dataGrid1.ItemsSource = GridItems; 
    } 

    private void btn_Add_Click(object sender, RoutedEventArgs e) 
    { 
     Window1 win = new Window1(this); 
     win.Show(); 
    } 
} 

public class Window1 
{ 
    public Window1() 
    { 
     InitializeComponent();  
    } 

    private MainWindow m = null; 

    public Window1(Window callingFrom) 
    { 
     m = callingFrom as MainWindow; 

     InitializeComponent(); 
    } 

    private void btn_Click(object sender, RoutedEventArgs e) 
    { 
     // Because m.GridItems is an ObservableCollection, which has been assigned 
     // to the datagrid's ItemsSource property, the datagrid will magically 
     // update itself with the new item. When you add new items, the old items will 
     // still be seen because you are adding them to the same old collection 
     // instead of creating a new empty collection every time. 
     m.GridItems.Add(new GridItem(txt2.Text, txt1.Text)); 
    } 
} 

ていますが、理にかなった方法で物事に名前を付ける必要があります。ここでは

はあまり間違った方法でこれを行う方法です。 txt2は何も意味しません。 txtIDとかそれが何であるかを明記する必要があるので、コードを見ている人はすぐにそれが何であるかを理解することができます。 mも非常に有益な名前ではありません。

+0

ありがとうございました!それは私が期待したように働いています!あなたのコメントをありがとう!私は将来これらのことに従います! – zooha

関連する問題