2015-09-02 2 views
0

Я создал приложение, связанное с локальной базой данных. Он работает хорошо, но единственная проблема заключается в том, что после нажатия кнопки вставки данные вставляются в db, но они не отображаются в GridView, только после закрытия и повторного открытия приложения. Как я могу заставить его показывать данные сразу после нажатия кнопки, которая вставляет значения? Благодаря !DataGridView не показывает данные после вставки в локальную базу данных

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.SqlServerCe; 
using System.IO; 

namespace Gradinita 
{ 
    public partial class Grupa : Form 
    { 
     string nume = ""; 
     List<Label> labels = new List<Label>(); 
     public Grupa(string nume) 
     { 
      InitializeComponent(); 
      this.nume = nume; 

     } 

     private void Grupa_Load(object sender, EventArgs e) 
     { 
      // TODO: This line of code loads data into the 'grupeDataSet8.copii' table. You can move, or remove it, as needed. 
      this.copiiTableAdapter2.Fill(this.grupeDataSet8.copii); 
      // TODO: This line of code loads data into the 'grupeDataSet7.copii' table. You can move, or remove it, as needed. 
      this.copiiTableAdapter1.Fill(this.grupeDataSet7.copii); 
      // TODO: This line of code loads data into the 'grupeDataSet3.copii' table. You can move, or remove it, as needed. 
      this.copiiTableAdapter.Fill(this.grupeDataSet3.copii); 
      var connString = (@"Data Source=" + System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)) + @"\Grupe.sdf"); 
      using (var conn = new SqlCeConnection(connString)) 
      { 
       try 
       { 
        conn.Open(); 
        var query = "SELECT * FROM grupe WHERE Nume='" + nume + "'"; 
        var command = new SqlCeCommand(query, conn); 
        var dataAdapter = new SqlCeDataAdapter(command); 
        var dataTable = new DataTable(); 
        dataAdapter.Fill(dataTable); 

        label1.Text = dataTable.Rows[0][0].ToString(); 
        label2.Text = dataTable.Rows[0][1].ToString(); 
        label3.Text = dataTable.Rows[0][2].ToString(); 
        label4.Text = dataTable.Rows[0][3].ToString(); 

       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.ToString()); 
       } 
     } 
    } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      if (checkBox1.Checked) 
      { 
       label5.Text = ("1"); 
      } 
      if (checkBox2.Checked) 
      { 
       label5.Text = ("0"); 
      } 
      textBox1.Text = (Convert.ToInt32(textBox5.Text) - Convert.ToInt32(textBox6.Text)).ToString(); 
      var connString = (@"Data Source=" + Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + @"\Grupe.sdf"); 
      using (var conn = new SqlCeConnection(connString)) 
      { 
       try 
       { 
        conn.Open(); 
        var query = "INSERT INTO copii(prezenta, Nume, Prenume, Program, Taxa, Achitat, Diferenta) VALUES('" + label5.Text + "', '" + textBox2.Text.Trim() + "', '" + textBox3.Text.Trim() + "', '" + textBox4.Text.Trim() + "', '" + textBox5.Text.Trim() + "', '"+ textBox6.Text.Trim()+"', '"+ textBox1.Text.Trim() +"');"; 
        MessageBox.Show(query); 
        var command = new SqlCeCommand(query, conn); 
        command.ExecuteNonQuery(); 
        dataGridView1.Refresh(); //not working obviously 

       } 
       catch (Exception ex) 
       { 
        MessageBox.Show(ex.ToString()); 
       } 

      } 
     } 
     } 
+0

данныеGridView1.ReBind(); –

+0

вам следует выбрать Data и снова привязать datagridview. – Arash

+0

Он показывает ошибку, поскольку System.DataGrindView не содержит определения для «ReBind». Зачем? – Ezekiel

ответ

0

Необходимо повторно запросить данные и переподтвердить данные.

Что-то вроде:

dataGridView1.DataSource = SomeDataTableSource; 
dataGridView1.DataBind(); 
+0

DataGridView не содержит определения для DataBind. Зачем? – Ezekiel

+0

ах, извините за использование System.Windows.Forms, попробуйте вместо этого dataGridView1.SetDataBinding (SomeDataSet, «TableName»); –

+0

То же самое. Нет определения для SetDataBinding. – Ezekiel

0

мне удалось обойти это путем повторного добавления сетки к элементу управления. Во-первых, вы копируете сетку в переменной, затем вы удаляете ее из родительского элемента управления, а затем добавляете переменную в элементы управления этого элемента управления.

var grid = dataGridView1.Parent.Controls["dataGridView1"]; 
var ctr = dataGridView1.Parent; 
ctr.Controls.Remove(dataGridView1); 
ctr.Controls.Add(grid); 

Это не тестировался, и я, возможно, ошибочно некоторые имена, потому что я не установлен здесь VS, но вы получите идею. Не самое изящное решение, но это сработало для меня. Вы также можете попробовать dataGridView1.Refresh() - что это не сработало для меня.

+0

Не содержит определения для ошибки ParentControl. – Ezekiel

+0

Да, это только Родитель, я сказал, что у меня нет VS: P Я отредактировал код –

+0

Не работает, некоторые ошибки. – Ezekiel

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