2013-08-07 3 views
22

Я пытаюсь представить результаты запроса, но я продолжаю получать пустую сетку данных. Это как сами данные не видноЗаполнение данных datagridview с результатами sql-запроса

Вот мой код:

private void Employee_Report_Load(object sender, EventArgs e) 
{ 
    string select = "SELECT * FROM tblEmployee"; 
    Connection c = new Connection(); 
    SqlDataAdapter dataAdapter = new SqlDataAdapter(select, c.con); //c.con is the connection string 
    SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter); 

    DataTable table = new DataTable(); 
    table.Locale = System.Globalization.CultureInfo.InvariantCulture; 
    dataAdapter.Fill(table); 
    bindingSource1.DataSource = table; 

    dataGridView1.ReadOnly = true;   
    dataGridView1.DataSource = bindingSource1; 
} 

Что случилось с этим кодом?

+0

Bind данные в DataGridView –

ответ

29

Вот ваш код устроился. Затем забыть BindingSource

var select = "SELECT * FROM tblEmployee"; 
var c = new SqlConnection(yourConnectionString); // Your Connection String here 
var dataAdapter = new SqlDataAdapter(select, c); 

var commandBuilder = new SqlCommandBuilder(dataAdapter); 
var ds = new DataSet(); 
dataAdapter.Fill(ds); 
dataGridView1.ReadOnly = true; 
dataGridView1.DataSource = ds.Tables[0]; 
+4

Вы не можете «заполнить» DataTable. Не нужно 'DataSet'. – banging

+0

Код, который я покажу, должен по-прежнему работать ... в любом случае –

+2

Он работает, но «DataSet» - это дополнительные накладные расходы, которые не подходят для использования. – banging

2

Вам не нужно bindingSource1

Просто установите dataGridView1.DataSource = table;

+0

я попытался это, и это не работает либо – user2023203

+0

вы видите ли столбцы в DataGridView ? Если да, то ваш запрос не возвращает никаких строк! – banging

+0

Я проверил свой запрос в sql server 2008 и возвратил все данные таблицы employee – user2023203

1

Попробуйте привязки вашей DataGridView к DefaultView в DataTable:

dataGridView1.DataSource = table.DefaultView; 
5

Строка strConnection = Properties.Settings.Default.BooksConnectionString;

 SqlConnection con = new SqlConnection(strConnection); 


     SqlCommand sqlCmd = new SqlCommand(); 
     sqlCmd.Connection = con; 
     sqlCmd.CommandType = CommandType.Text; 
     sqlCmd.CommandText = "Select * from titles"; 
     SqlDataAdapter sqlDataAdap = new SqlDataAdapter(sqlCmd); 

     DataTable dtRecord = new DataTable(); 
     sqlDataAdap.Fill(dtRecord); 
     dataGridView1.DataSource = dtRecord; 
+0

Спасибо, что сработали хорошо – Sam

0

Вы можете получить пустую таблицу данных, если вы установите источник данных в Dataset, который был добавлен в форму, но не используется. Установите это значение «Нет», если вы программно устанавливаете свой источник данных на основе вышеуказанных кодов.

0

Вы можете попробовать этот образец и всегда проверять свою строку подключения , вы можете использовать этот пример с или без связывания источника, вы можете загрузить данные в datagridview.

private void Employee_Report_Load(object sender, EventArgs e) 
{ 
     var table = new DataTable(); 

     var connection = "ConnectionString"; 

     using (var con = new SqlConnection { ConnectionString = connection }) 
     { 
      using (var command = new SqlCommand { Connection = con }) 
      { 

       if (con.State == ConnectionState.Open) 
       { 
        con.Close(); 
       } 

       con.Open(); 

       try 
       { 
        command.CommandText = @"SELECT * FROM tblEmployee"; 
        table.Load(command.ExecuteReader()); 

        bindingSource1.DataSource = table; 

        dataGridView1.ReadOnly = true; 
        dataGridView1.DataSource = bindingSource1; 

       } 
       catch(SqlException ex) 
       { 
        MessageBox.Show(ex.Message + " sql query error."); 
       } 

      } 

     } 

} 
0

вы должны добавить таблицы свойств к источнику данных DataGridView

dataGridView1.DataSource = table.Tables[0]; 
+0

Уже принят ответ, который предоставляет также дополнительную информацию, чем вы. Это совершенно излишне. –