2014-11-27 3 views
1

У меня есть две формы. Форма 1 имеет datagridview в стороне, а в форме 2 есть текстовое поле и кнопка внутри. Значение вводится в текстовое поле, которое будет вставлено в datagridview после нажатия кнопки. Ранее я использовал Show() и ShowDialog(), но после того, как я нажал кнопку, появится новая форма с новыми данными. Я также попробовал Update() и Refresh(), но все еще не работал? Мне нужно обновить datagridview после нажатия кнопки, и новая форма не появится. Кто-нибудь может мне помочь? Пожалуйста ....Обновить данные datagridview после обновления данных в другой форме

Вот мой код:

Форма 1

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     this.dataGridView1.Rows.Add(46.13, 0, 0); 
     this.dataGridView1.Rows.Add(105.22, 0, 0); 
     this.dataGridView1.Rows.Add(80.67, 0, 0); 
    } 


    public void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 

    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     Form2 newMDIChild = new Form2(); 
     // Set the parent form of the child window. 
     newMDIChild.MdiParent = this; 
     // Display the new form. 
     newMDIChild.Show(); 

    } 

Форма 2

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 

    } 


    private void button1_Click(object sender, EventArgs e) 
    { 
     FormTest.Form1 frm = new Form1(); 

     frm.dataGridView1.Rows[0].Cells[0].Value = textBox1.Text; 

     frm.(); 

    } 
} 

ответ

0

Форма 2 Кнопка Нажмите, используйте этот код

private void button1_Click(object sender, EventArgs e) 
{ 
    Form frm=(Form)this.MdiParent; 
    DataGridView dt = (DataGridView)frm.Controls["dataGridView1"]; 
    dt.Rows[0].Cells[0].Value = textBox1.Text; 

} 
+0

К сожалению у меня есть еще один вопрос, что если Form1 и Form2 являются подформы формы контейнера. Form1 и form2 можно открыть в menustrip. В этом случае, что я должен изменить в коде для достижения той же цели? – Yao

+0

Если отображается Form1, найдите имя формы в mdichild create object и передайте значение – Sathish

+0

Извините, что я новичок в C# ... Я действительно не понимаю, что вы имеете в виду ... Не могли бы вы дать мне пример кода, делать в форме2? Я попробовал ваш код выше, но он сломался после нажатия кнопки. – Yao

0

Вы можете создать интерфейс обратного вызова с одним мной чтобы добавить и обновить данные. Внесите это в form1, затем создайте новый конструктор в form2 с типом параметра интерфейса и при создании объекта form2 передайте ссылку формы1 (this).

из формы2, когда вы нажимаете на кнопку, просто вызывайте метод интерфейса с данными для обновления в gridview в качестве параметра. Объект интерфейса здесь в форме2 содержит ссылку на форму1, и он вызовет функцию, реализованную в form1, обновляет сетку.

interface ICallBack { void UpdateGrid(string data); } 

public calss Class1 : ICallBack 
{ 
     // Rest of your code 

    void UpdateGrid(string data) 
    { 
      gridView.Rows[0].Cells[0].Value = data; 
    } 

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

public calss Class2 
{ 
    ICallBack callback; 

    public Class2(ICallBack callback) 
    { 
     this.callback = callback; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     callback.UpdateGrid(textBox1.Text); 
    } 
} 

Надеюсь, это поможет!

0

Если вы хотите обновить/обновить datagridview в другой форме. Я вижу два способа: 1. DataTable (Создать DataTable и сделать источник вашей DataGridView, если вы сделаете изменения, вы поймете, что изменения немедленно влияют DataGridView)

Программного для достижения этого следует, как: Предполагая form- 1 имеет DataGridView и форму имеет некоторые элементы управления, откуда вы хотите добавить/редактировать/удалять данные и хотите изменить DataGridView по форме-1

в форме-2 создать конструктор, как:

Form myForm1-null; 
    public Form-2(Form objForm1) 
    { 
myForm1=objForm1; 
InitializeComponent(); 
    } 

сейчас вы можете получить доступ к объекту myForm1, как это на любом событии:

private void btnadd_Click(object sender, EventArgs e) 
{ 
DataGridView dg = (DataGridView)myForm1.Controls["YourDataGridViewName"]; 
dg.Rows.Add(); 
} 

Теперь приходит к Форме-1 и открыть мероприятие, на котором вы звоните Форму-2

private void btnShow_Click(object sender, EventArgs e) 
{ 
Form-2 oFrm2 = new Form-2(this); 
oFrm2.Show(); 
} 

Надеется, что это помогает

Смежные вопросы