2014-02-01 2 views
0

Я портирование программ с VS C# 2003 VS C# 2012 и я встретив проблему в 2012 году, что я не бегите в при использовании C# 2003.dataGridView1 не включает в себя новые строки базы данных

Чтобы продемонстрировать, я создал простая форма1 только с одним datagridview1.

private void Form1_Load(object sender, EventArgs e) 

//includes only this 
this.table1TableAdapter.Fill(this.database1DataSet.Table1); 

и dataGridView1 правильно отображает 2 тестовых строк в источнике данных (MS Access дБ)

Проблема заключается в том, если я добавить 3-ю строку в MS Access дБ и запустить программу снова, его все еще только показывает исходные 2 строки.

Я неоднократно искал решение, поэтому datagridview1 будет показывать новые строки дБ, начиная с строки 3, но не может найти его. Это не должно быть так сложно, не так ли ?!

Эта ссылка появилась иметь решение: how to update rows list of a datagridview after adding new row to a table

, но я не могу заставить его работать.

Помощь!

Спасибо.

+0

Что вы подразумеваете под «запустить программу снова»? Вы нажали кнопку в окне или запустили ее с рабочего стола/проводника? Также, пожалуйста, покажите и проверьте свой выбор. Возможно, новая строка, которую вы добавили, не соответствует критериям SELECT. – NoChance

ответ

0

Как вы хотели в этом SE question попытаться установить DataSource dataGridView в значение null, а затем связать его снова.

Я бы предложил использовать void для этого и называть его, когда захотите.

добавить using System.Data.OleDb

Пример

private void LoadData() 
{ 
string Constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/PathToYourAccessFile"; 
string SQLstr = "Select * from YourAccessTable"; 
OleDbConnection Conn = new OleDbConnection(Constr); 
Conn.Open(); 
OleDbDataAdapter ODA; 
DataTable DT; 
ODA = new OleDbDataAdapter (SQLstr, Conn); 
DT = new DataTable(); 
ODA.Fill(DT); 
dataGridView1.DataSource = DT ; 
Conn.Close(); 

} 

вызвать метод как LoadData();

Это способ прямого доступа к базе данных Access

NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter = 
     new NorthwindDataSetTableAdapters.RegionTableAdapter(); 

regionTableAdapter.Delete(5, "NorthWestern"); 

От MSDN

просунуть непосредственно из WinForms попробовать следующие

string myConnectionString; 
     myConnectionString = 
       @"Provider=Microsoft.ACE.OLEDB.12.0;" + 
       @"Data Source=C:\Users\Public\Database1.accdb;"; 

     using (var con = new OleDbConnection()) 
     { 
      con.ConnectionString = myConnectionString; 
      con.Open(); 

      using (var cmd = new OleDbCommand()) 
      { 
       cmd.Connection = con; 
       cmd.CommandType = System.Data.CommandType.Text; 
       cmd.CommandText = 
        @"INSERT INTO YourTable (Column1, Column2) VALUES ('Hello', 'World')"; 
       cmd.ExecuteNonQuery(); 
      } 
      con.Close(); 
     } 

Используйте этот код, чтобы открыть базу данных в DataGridView

+0

Спасибо за ответ! – user3260976

+0

@ user3260976 это сработает для вас? – Marek

+0

Нет, это не так. Почему я не могу попасть на возврат каретки, чтобы перейти к следующей строке? Ну что ж!Я сделал это: this.table1TableAdapter.Fill (this.database1DataSet.Table1); LoadData(); и private void LoadData() был, как вы показали. Теперь у datagrid нет строк, даже не из двух исходных строк. – user3260976

0

Устранена путем добавления LoadData к Form1_Load, как это:

private void Form1_Load(object sender, EventArgs e) 
    { 
     this.table1TableAdapter.Fill(this.database1DataSet.Table1); 
     LoadData(); 

    } 

где LoadData соответствует предложению Марека:

private void LoadData() 
    { 
     string Constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\User1\\Documents\\Database1.accdb"; 
     string SQLstr = "Select * from Table1"; 
     OleDbConnection Conn = new OleDbConnection(Constr); 
     Conn.Open(); 
     OleDbDataAdapter ODA; 
     DataTable DT; 
     ODA = new OleDbDataAdapter (SQLstr, Conn); 
     DT = new DataTable(); 
     ODA.Fill(DT); 
     dataGridView1.DataSource = DT ; 
     Conn.Close(); 

    } 
+0

Почему вы опубликовали такой же ответ, что и я? Чтобы сообщать сообществу о правильном ответе, используйте кнопку " Отметьте как ответ "на левой стороне сообщения. – Marek

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