Мне нужна помощь. Я работал с коллегой, пытаясь обновить datagridview на form1 каждый раз, когда форма 2 закрывается. К сожалению, ни один из предыдущих вопросов, которые он задавал, не помог в работе над нашим решением, потому что мы оба новички в C #. В результате я решил скопировать и вставить сюда весь наш код.

Мы не совсем уверены, что входит в public void RefreshGridView (чтобы обновить datagridview1 на form1) и как заставить его запускаться из закрывающего действия form2, то есть private void Form2_FormClosed.

Форма 1

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace PGPTool
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'dbDataSet.PGP' table. You can move, or remove it, as needed.
        this.pGPTableAdapter.Fill(this.dbDataSet.PGP);
    }

    // new

    private void new_btn_Click(object sender, EventArgs e)
    {
        var cell1 = "";
        var cell2 = "";
        Form2 Form2 = new Form2(cell1, cell2);
        Form2.Show();
    }

    // clear

    private void clear_btn_Click(object sender, EventArgs e)
    {
        search_txt.Text = "";
    }

    // search

    private void search_btn_Click(object sender, EventArgs e)
    {
        searchData();
    }

    private void search_txt_TextChanged(object sender, EventArgs e)
    {
        searchData();
    }

    private void searchData()
    {
        BindingSource bs = new BindingSource();
        bs.DataSource = dataGridView1.DataSource;
        bs.Filter = "PGP like '%" + search_txt.Text + "%' or Team like '%" + search_txt.Text + "%'";
        dataGridView1.DataSource = bs;
    }

    // edit

    private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
        var selectedRow = dataGridView1.CurrentRow;
        var cell1 = Convert.ToString(selectedRow.Cells[0].Value);
        var cell2 = Convert.ToString(selectedRow.Cells[1].Value);
        Form2 Form2 = new Form2(cell1, cell2);
        Form2.Show();
    }

    // copy to clipboard

    private bool isCellClicked = false;

    private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
    {
        var hit = dataGridView1.HitTest(e.X, e.Y);
        isCellClicked = (hit.Type == DataGridViewHitTestType.Cell);
    }

    private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
    {
        e.Cancel = !isCellClicked;
    }

    private void copyToolStripMenuItem1_Click(object sender, EventArgs e)
    {
        Clipboard.SetText(Convert.ToString(dataGridView1.CurrentCell.Value));
    }

    // refresh grid

    public void RefreshGridView()
    {
    }

}
}

Форма 2

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace PGPTool
{
    public partial class Form2 : Form
    {
        public Form2(string cell1, string cell2)
        {
        InitializeComponent();
        pgpText.Text = cell1;
        pgpOld.Text = cell1;
        teamText.Text = cell2;
    }

    private void pgpText_TextChanged(object sender, EventArgs e)
    {
        pgpText.CharacterCasing = CharacterCasing.Upper;
    }

    private void teamText_TextChanged(object sender, EventArgs e)
    {
        teamText.CharacterCasing = CharacterCasing.Upper;
    }

    private void save_btn_Click(object sender, EventArgs e)
    {

        if (pgpText.Text.Trim().Length == 0)
        {
            MessageBox.Show("Please fill the following textbox: PGP");
        }
        else if (teamText.Text.Trim().Length == 0)
        {
            MessageBox.Show("Please fill the following textbox: Team");
        }
        else
        {

            using (OleDbConnection conn = new OleDbConnection())
            {
                string pgp_new = pgpText.Text;
                string pgp_old = pgpOld.Text;
                string team = teamText.Text;
                conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='db.mdb'";
                OleDbCommand command = new OleDbCommand();
                command.Connection = conn;
                command.CommandText = "UPDATE PGP SET PGP=?,Team=? WHERE PGP=?";
                command.Parameters.Add("pgp_new", OleDbType.VarChar).Value = pgp_new;
                command.Parameters.Add("team", OleDbType.VarChar).Value = team;
                command.Parameters.Add("pgp_old", OleDbType.VarChar).Value = pgp_old;
                conn.Open();

                int affectedRows = (int)command.ExecuteNonQuery();

                if (affectedRows == 0)
                {
                    command.CommandText = "INSERT INTO PGP (PGP,Team) VALUES (?, ?)";
                    command.Parameters.RemoveAt(2);
                    command.ExecuteNonQuery();
                    if (MessageBox.Show("Table Saved!", "Update", MessageBoxButtons.OK) == DialogResult.OK)
                    {
                        this.Close();
                    }
                }

                if (affectedRows > 0)
                {
                    if (MessageBox.Show("Table Saved!", "Update", MessageBoxButtons.OK) == DialogResult.OK)
                    {
                        this.Close();
                    }
                }

            }
        }
    }

    private void cancel_btn_Click(object sender, EventArgs e)
    {
        this.Close();
    }

    private Form1 Form1Instance
    {
        get;
        set;
    }

    public Form2(Form1 form1Instance)
    {
        Form1Instance = form1Instance;
    }

    private void Form2_FormClosed(object sender, FormClosedEventArgs e)
    {
    }

    }
}
1
methuselah 3 Янв 2014 в 02:14

2 ответа

Лучший ответ

Вы можете просто захватить событие закрытия формы Form2 из формы Form1.
Это действительно просто

private void new_btn_Click(object sender, EventArgs e)
{
    var cell1 = "";
    var cell2 = "";
    Form2 Form2 = new Form2(cell1, cell2);
    Form2.FormClosed += Form2HasBeenClosed;
    Form2.Show();
}
private void Form2HasBeenClosed(object sender, FormClosedEventArgs e)
{
    // Inside the form1 call your RefreshGridView
}
4
Steve 2 Янв 2014 в 22:37

Вы должны поднять event в Form2, когда он закрывается в событиях FormClosing или FormClosed. Затем ваш Form1 должен подписаться на это событие и обработать его. Затем в обработчике событий вы можете обновить вид сетки. Дополнительную информацию о событиях см. В этой статье в MSDN: http://msdn.microsoft .com / ru-ru / library / awbftdfh.aspx

0
Arin Ghazarian 2 Янв 2014 в 22:33