简体   繁体   中英

How do I refresh a GridView control after inserting data into the table?

I am trying to refresh a GridView after inserting the data. I have tried a lot of options but none of the worked for me. How can I resolve this problem?

Here is my code:

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 ScanAction;
using System.Data.SqlClient;

namespace DigitalJournalDNAIsolation
{
    public partial class Form1 : Form
    {
        private List<Scan> scanList;

        private SqlConnection connection;

        public Form1()
        {
            InitializeComponent();

            scanList = new List<Scan>();
        }

        private void openDatabase()
        {
            connection = new SqlConnection();
            connection.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\prp\Documents\Visual Studio 2010\Projects\DigitalJournalDNAIsolation\DigitalJournalDNAIsolation\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
            connection.Open();
        }

        private void closeDatabase()
        {
            connection.Close();
        }


        //Add items to the list
        private void textBoxBarCode_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)13)
            {
                SaveToDataBase();



                textBoxBarCode.Clear();
            }

        }

        //What machine has bees selected by the user
        public string machineSelected(string machine)
        {
            bool mmpp1 = checkBoxMMPP1.Checked;
            bool mmpp2 = checkBoxMMPP2.Checked;


            if (mmpp1 == true && mmpp2 == false)
            {
                return machine = "MMPP-1";
            }

            if (mmpp1 == false && mmpp2 == true)
            {
                return machine = "MMPP-2";
            }

            if (mmpp1 == true && mmpp2 == true)
            {
                //MessageBox.Show("Select either MMPP-1 or MMPP-2", "Please select a machine");
                return machine = "Multiple machines are selected";
            }
            else
            {
                //MessageBox.Show("Select either MMPP-1 or MMPP-2", "Please select a machine");
                return machine = "No machine selected";
            }


        }
        public string machine { get; set; }

        public string bufferStraat(string straat)
        {
            bool manual = checkBoxManual.Checked;
            bool janus = checkBoxJanus.Checked;


            if (manual == true && janus == false)
            {
                return straat = "Manual";
            }

            if (manual == false && janus == true)
            {
                return straat = "Janus";
            }

            if (manual == true && janus == true)
            {
                //MessageBox.Show("Select either Manual or Janus", "Please select a machine");
                return straat = "Multiple machines are selected";
            }
            else
            {
                //MessageBox.Show("Select either Manual or Janus", "Please select a machine");
                return straat = "No machine is selected";
            }
        }

        public string straat { get; set; }

        public void SaveToDataBase()
        {
            string date = DateTime.Now.ToLongDateString();

            openDatabase();

            SqlCommand command = new SqlCommand();
            command.Connection = connection;
            command.CommandType = CommandType.Text;
            command.CommandText = "INSERT INTO Table1 (box,username,comment,machine,buffers,date) VALUES (@box,@username,@comment,@machine,@buffers,@date)";

            command.Parameters.Add("@box", SqlDbType.VarChar).Value = textBoxBarCode.Text;
            command.Parameters.Add("@username", SqlDbType.VarChar).Value = textBoxUser.Text;
            command.Parameters.Add("@comment", SqlDbType.VarChar).Value = textBoxComment.Text;
            command.Parameters.Add("@machine", SqlDbType.VarChar).Value = machineSelected(machine);
            command.Parameters.Add("@buffers", SqlDbType.VarChar).Value = bufferStraat(straat);
            command.Parameters.Add("@date", SqlDbType.VarChar).Value = date;

            command.ExecuteNonQuery();

            closeDatabase();
        }

        public void refreshGrid1()
        {
            openDatabase();

            SqlCommand readcmd = new SqlCommand();
            readcmd.Connection = connection;
            readcmd.CommandType = CommandType.Text;
            readcmd.CommandText = "SELECT * FROM Table1";

            SqlDataReader reader = null;

            reader = readcmd.ExecuteReader();

            closeDatabase();
        }


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


        private void infoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            using (AboutBox1 about = new AboutBox1())
            {
                about.ShowDialog();
            }
        }

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

Use gridView's DataBind method

 public void refreshGrid1()
    {
        openDatabase();

        SqlCommand readcmd = new SqlCommand();
        readcmd.Connection = connection;
        readcmd.CommandType = CommandType.Text;
        readcmd.CommandText = "SELECT * FROM Table1";

        SqlDataReader reader = null;

        reader = readcmd.ExecuteReader();

        closeDatabase();

        gridView.DataBind();

    }

Try doing this :-

1). Create a Binding Source and set the Datasource for this object to the DataTable.

2). Set the Datasource for your DataGrid to that of the Binding Source.

Now, When ever you commit changes to the DataTable, they will automatically reflect in your GridView.

This is how i solved the problem:

    private void openAllFromDatabase()
    {

        openConnection();

        string query = "select * from my_Table order by date desc";

        DataSet dset = new DataSet();
        SqlDataAdapter adapter = new SqlDataAdapter(query, connection);

        SqlCommandBuilder cb = new SqlCommandBuilder(adapter);

        adapter.Fill(dset, "my_Table");

        dataGridView1.DataSource = dset;
        dataGridView1.DataMember = "my_table";

        adapter.Update(dset, "my_Table");

        closeConnection();


    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM