2016-12-13 204 views
0

我有2種形式添加行,Form1包含在DataGridView和按鈕「添加」,Form2包含textboxs和按鈕「保存」,C#從另一種形式

我要添加行,當添加按鈕是出現窗口2點擊,然後保存信息從form2在datagridview點擊保存按鈕時 這是我用於添加和保存按鈕的代碼,但是當我這樣做時,它只保存從form1寫入的信息(保存按鈕沒有如果不更新datagridview的話)

private void AddButton_Click(object sender, EventArgs e) 
{ 
    Form2 windowAdd = new Form2(); 
    windowAdd.SetDesktopLocation(this.Location.X + this.Size.Width, this.Location.Y); 
    windowAdd.ShowDialog(); 
    var frm2 = new Form2(); 
    frm2.AddGridViewRows(textName.Text, textDescription.Text, textLocation.Text, textAction.Text); 
    textName.Focus(); 
    this.stockData.Product.AddProductRow(this.stockData.Product.NewProductRow()); 
    productBindingSource.MoveLast();  
} 

private void SaveButton_Click(object sender, EventArgs e) 
{ 
    productBindingSource.EndEdit(); 
    productTableAdapter.Update(this.stockData.Product); 
    this.Close(); 
} 
+0

你的Add按鈕的代碼似乎啓動窗口2的對話框(windowAdd) (你使用ShowDialog來顯示它的Modal,所以用戶必須關閉窗體才能繼續移動,窗體將是空白的),然後你用Form1的Textboxes中的值顯式地創建另一個form2(frm2)來調用看起來靜態的AddGridViewRows方法。然後,將Focus設置爲Form1.textName,然後向產品添加一行,並在數據源中添加MoveLast。這裏有太多錯誤,很難知道從哪裏開始。 –

回答

0

試試這個方法。 Form2可以接受一些建設參數。您將必須解析對productBindingSource和productDataAdaptor的引用。

public partial class Form2 : Form 
{ 
    private DataRow _theRow; 
    private bool _isNew; 

    public Form2(DataRow theRow, bool isNew) 
    { 
     InitializeComponent(); 
     _theRow = theRow; 
     _isNew = isNew; 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 
     textName.Text = _theRow["Name"]; 
     // Etc 
    } 

    private void btnSave_Click(object sender, EventArgs e) 
    { 
     // This is your add/edit record save button 
     // Here you would do stuff with your textbox values on form2 
     // including validation 
     if (!ValidateChildren()) return; 
     if (_isNew) 
     { 
      // Adding a record 
      productBindingSource.EndEdit(); 
      productTableAdapter.Update(); 
     } 
     else 
     { 
      // Editing a record 
     } 
     this.Close(); 
    } 
} 

這改變了您在Form1.Add Button事件中的呼叫。下面展示瞭如何利用使用塊來顯示錶單。

private void btnAdd_Click(object sender, EventArgs e) 
    { 
     DataRow newRow = stockData.Product.NewProductRow(); 
     using (var addForm = new Form2(newRow, true)) 
     { 
      addForm.StartPosition = FormStartPosition.CenterParent; 

      addForm.ShowDialog(this); 
      // Here you could access any public method in Form2 
      // You could check addForm.DialogResult for the status 
     } 

    } 

這不是做到這一點的最好辦法,但這個方向可能是嘗試一種更簡單的方法... 希望它可以幫助