Пошаговое руководство. Отображение данных из базы данных SQL Server в элементе управления DataGrid
В этом пошаговом руководстве выполняется получение данных из базы данных SQL Server и их отображение в элементе управления DataGrid. С помощью ADO.NET Entity Framework можно создавать классы сущностей, представляющих данные, и использовать LINQ для записи запроса, который выполняет получение указанных данных из класса сущности.
Необходимые компоненты
Для выполнения этого пошагового руководства требуются следующие компоненты:
- Visual Studio.
- Доступ к запущенному экземпляру SQL Server или SQL Server Express с подключенной учебной базой данных AdventureWorks. Базу данных AdventureWorks можно загрузить из GitHub.
Создание новых классов сущностей
- Создайте проект приложения WPF на Visual Basic или C# с именем DataGridSQLExample .
- В обозревателе решений щелкните проект правой кнопкой мыши, выберите сначала Добавить, а затем Новый элемент. Откроется диалоговое окно Добавление нового элемента.
- В области «Установленные шаблоны» выберите Данные и в списке шаблонов выберите ADO.NET EDM (модель данных с использованием сущностей).
- Назовите файл AdventureWorksModel.edmx , а затем щелкните Добавить. Появится мастер модели EDM.
- На экране «Выбор содержимого модели» выберите Конструктор EF из базы данных, а затем нажмите кнопку Далее.
- На экране «Выбор подключения к данным» укажите подключение к базе данных AdventureWorksLT2008. Дополнительные сведения см. в статье Диалоговое окно «Выбор подключения к данным». Проверьте, чтобы имя было AdventureWorksLT2008Entities и чтобы был установлен флажок у параметра Сохранить параметры соединения сущности в App.Config как:, после чего нажмите Далее.
- На экране «Выбор объектов базы данных» разверните узел «Таблицы» и выберите таблицы Product и ProductCategory. Вы можете создавать классы сущностей для всех таблиц; однако в этом примере данные извлекаются только из этих двух таблиц.

- Нажмите кнопку Готово. Сущности Product и ProductCategory отображаются в конструкторе сущностей.

Получение и представление данных
- Откройте файл MainWindow.xaml.
- Задайте для свойства Width элемента Window значение 450.
- В редакторе XAML добавьте следующий тег DataGrid между тегами
и , чтобы добавить элемент DataGrid с именем dataGrid1 .

Примечание. Если используется Visual Basic, в первой строке MainWindow.xaml замените x:Class=»DataGridSQLExample.MainWindow» на x:Class=»MainWindow» .
using System.Data.Entity.Core.Objects; using System.Linq; using System.Windows; namespace DataGridSQLExample < /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window < AdventureWorksLT2008Entities dataEntities = new AdventureWorksLT2008Entities(); public MainWindow() < InitializeComponent(); >private void Window_Loaded(object sender, RoutedEventArgs e) < var query = from product in dataEntities.Products where product.Color == "Red" orderby product.ListPrice select new < product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice >; dataGrid1.ItemsSource = query.ToList(); > > >
Imports System.Data.Objects Class MainWindow Dim dataEntities As AdventureWorksLT2008Entities = New AdventureWorksLT2008Entities Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded Dim products As ObjectQuery(Of Product) = dataEntities.Products Dim query = _ From product In products _ Where product.Color = "Red" _ Order By product.ListPrice _ Select product.Name, product.Color, CategoryName = product.ProductCategory.Name, product.ListPrice dataGrid1.ItemsSource = query.ToList() End Sub End Class

См. также
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
.NET Desktop feedback
The .NET Desktop documentation is open source. Provide feedback here.
Обратная связь
Отправить и просмотреть отзыв по
Как мне перенести импортированные данные из datagridview в MS sql

В пустой datagridview я получил данные из Excel таблицы и хочу его сохранить в таблице. Как мне это сделать? Вот сам код Form:
public partial class Form3 : Form < //Подключение к бд SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-CG70ETG; Initial Catalog=wsrdzudo; Integrated Security=True;"); //Запрос string query = "Select * From Participants"; SqlDataAdapter adapter; public Form3() < InitializeComponent(); adapter = new SqlDataAdapter(query, con); SqlCommandBuilder builder = new SqlCommandBuilder(adapter); DataTable dt = new DataTable(); adapter.Fill(dt); dataGridView1.DataSource = dt; >private void openFileDialog1_FileOk(object sender, CancelEventArgs e) < >private void button1_Click(object sender, EventArgs e) < //Импорт данных из Ecxel OpenFileDialog opf = new OpenFileDialog(); opf.Filter = "Excel File(*.xlsx;*.xls)|*.xlsx;*.xls|All Files(*.*)|*.*"; opf.ShowDialog(); DataTable tb = new DataTable(); string filename = opf.FileName; string ConStr = String.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=; Extended Properties=Excel 12.0;", filename); System.Data.DataSet ds = new System.Data.DataSet("EXCEL"); OleDbConnection con = new OleDbConnection(ConStr); con.Open(); DataTable schemaTable = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] < null, null, null, "TABLE" >); string sheet1 = (string)schemaTable.Rows[0].ItemArray[2]; string select = String.Format("SELECT * FROM []", sheet1); OleDbDataAdapter ad = new OleDbDataAdapter(select, con); ad.Fill(ds); tb = ds.Tables[0]; con.Close(); dataGridView1.DataSource = tb; > private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) < >private void button2_Click(object sender, EventArgs e) < adapter.Update((DataTable)dataGridView1.DataSource); >private void button3_Click(object sender, EventArgs e) < //Подключение к бд string connectionString = @"Data Source=DESKTOP-CG70ETG; Initial Catalog=wsrdzudo; Integrated Security=True;"; using (SqlConnection con = new SqlConnection(connectionString)) < //Запрос на удаление SqlCommand com = new SqlCommand("DELETE FROM Participants WHERE Participants_id= @id", con); int com.Parameters.AddWithValue("@id", id); con.Open(); try < com.ExecuteNonQuery(); MessageBox.Show("Запись удалена"); >catch < MessageBox.Show("Удалить не удалось!"); >> > private void textBox1_TextChanged(object sender, EventArgs e) < for (int i = 0; i < dataGridView1.RowCount; i++) < dataGridView1.Rows[i].Selected = false; for (int j = 0; j < dataGridView1.ColumnCount; j++) if (dataGridView1.Rows[i].Cells[j].Value != null) if (dataGridView1.Rows[i].Cells[j].Value.ToString().Contains(textBox1.Text)) < dataGridView1.Rows[i].Selected = true; break; >> > private void Form3_Load(object sender, EventArgs e) < // TODO: данная строка кода позволяет загрузить данные в таблицу "wsrdzudoDataSet.Participants". При необходимости она может быть перемещена или удалена. this.participantsTableAdapter.Fill(this.wsrdzudoDataSet.Participants); >>
Как из datagridview перенести данные в sql
Данное руководство устарело. Актуальное руководство: по ADO.NET и работе с базами данных в .NET 6
Последнее обновление: 31.10.2015
Ранее мы рассмотрели, как удобно загружать данные в приложении Windows Forms в элемент DataGridView через DataSet. Теперь определим полнофункциональную форму, через которую мы сможем производить все стандартные CRUD операции в базе данных.
Итак, определим форму, на которой будет элемент DataGridView и три кнопки для добавления, удаления и сохранения изменений. Форма в итоге будет выглядеть примерно следующим образом:

Код формы будет выглядеть следующим образом:
using System; using System.Data; using System.Windows.Forms; using System.Data.SqlClient; namespace AdoNetWinFormsApp < public partial class Form1 : Form < DataSet ds; SqlDataAdapter adapter; SqlCommandBuilder commandBuilder; string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; string sql = "SELECT * FROM Users"; public Form1() < InitializeComponent(); dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView1.AllowUserToAddRows = false; using (SqlConnection connection = new SqlConnection(connectionString)) < connection.Open(); adapter = new SqlDataAdapter(sql, connection); ds = new DataSet(); adapter.Fill(ds); dataGridView1.DataSource = ds.Tables[0]; // делаем недоступным столбец id для изменения dataGridView1.Columns["Id"].ReadOnly = true; >> // кнопка добавления private void addButton_Click(object sender, EventArgs e) < DataRow row = ds.Tables[0].NewRow(); // добавляем новую строку в DataTable ds.Tables[0].Rows.Add(row); >// кнопка удаления private void deleteButton_Click(object sender, EventArgs e) < // удаляем выделенные строки из dataGridView1 foreach(DataGridViewRow row in dataGridView1.SelectedRows) < dataGridView1.Rows.Remove(row); >> // кнопка сохранения private void saveButton_Click(object sender, EventArgs e) < using (SqlConnection connection = new SqlConnection(connectionString)) < connection.Open(); adapter = new SqlDataAdapter(sql, connection); commandBuilder = new SqlCommandBuilder(adapter); adapter.InsertCommand = new SqlCommand("sp_CreateUser", connection); adapter.InsertCommand.CommandType = CommandType.StoredProcedure; adapter.InsertCommand.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 50, "Name")); adapter.InsertCommand.Parameters.Add(new SqlParameter("@age", SqlDbType.Int, 0, "Age")); SqlParameter parameter = adapter.InsertCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "Id"); parameter.Direction = ParameterDirection.Output; adapter.Update(ds); >> > >
Здесь для добавления объекта мы будем обращаться к хранимой процедуре sp_CreateUser, которая была добавлена в базу данных в прошлой теме.
В конструкторе данные загружаются в DataSet, первая таблица которого устанавливается в качестве источника данных для dataGridView1:
dataGridView1.DataSource = ds.Tables[0];
Также в конструкторе устанавливается полное выделение строки и запрет на ручное добавление новых строк:
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView1.AllowUserToAddRows = false;
В обработчике кнопки добавления создается новая строка, которая добавляется в таблицу объекта DataSet. И так как мы ранее установили привязку к источнику данных, то автоматически новая строка также будет добавляться и в dataGridView1:
private void addButton_Click(object sender, EventArgs e) < DataRow row = ds.Tables[0].NewRow(); // добавляем новую строку в DataTable ds.Tables[0].Rows.Add(row); >
В обработчике кнопки удаления удаляются выделенные строки в dataGridView1. Опять же в силу привязки к источнику данных будет также происходить удаление и из таблицы в DataSet:
private void deleteButton_Click(object sender, EventArgs e) < foreach(DataGridViewRow row in dataGridView1.SelectedRows) < dataGridView1.Rows.Remove(row); >>
Для обновления на не нужна никакая кнопка, так как мы можем нажать на любую ячейку таблицы (кроме заблокированного для изменения столбца Id) и изменить в ней данные. Однако сами по себе добавление новой строки, удаление строк, изменение ячеек ни как автоматически не отразятся на базе данных. И чтобы бд синхронизировалась, пользователю надо будет нажать на кнопку сохранения, обработчик которой выглядит следующим образом:
private void saveButton_Click(object sender, EventArgs e) < using (SqlConnection connection = new SqlConnection(connectionString)) < connection.Open(); adapter = new SqlDataAdapter(sql, connection); commandBuilder = new SqlCommandBuilder(adapter); adapter.InsertCommand = new SqlCommand("sp_CreateUser", connection); adapter.InsertCommand.CommandType = CommandType.StoredProcedure; adapter.InsertCommand.Parameters.Add(new SqlParameter("@name", SqlDbType.NVarChar, 50, "Name")); adapter.InsertCommand.Parameters.Add(new SqlParameter("@age", SqlDbType.Int, 0, "Age")); SqlParameter parameter = adapter.InsertCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "Id"); parameter.Direction = ParameterDirection.Output; adapter.Update(ds); >>
Как в прошлой теме здесь устанавливается у адаптера команда на добавление InsertCommand и затем вызывается метод Update() . В итоге мы можем добавить несколько строк, удалить, изменить, и потом один раз мы нажмем на кнопку, и все изменения будут применены к базе данных.
Как из datagridview перенести данные в sql
Доброго времени суток!
есть форма. на ней есть кнопка и datagridview. Как вывести в datagridview результат: «select*from jour.bas» (БД jour, таблица bas).
Что было сделано:
private void button3_Click(object sender, EventArgs e)
собственно говоря спрашиваю, т.к. сам разобраться не смог. Спасибо за помощь.
использую коннектор mysql/net.
Последний раз редактировалось sinj; 01.09.2011 в 22:07 .
программирователь
Пользователь
Регистрация: 15.02.2009
Сообщений: 72
подключение к бд происходит. datagridview пустой.
Последний раз редактировалось sinj; 01.09.2011 в 22:08 .
Регистрация: 25.08.2011
Сообщений: 2,841
Вот так необходимо сделать:
string CommandText = "select*from jour.bas"; string ConnectString = "Database=jour;Data Source=localhost;User myConnection = new MySqlConnection(ConnectString); MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection); DataSet myDataSet= new DataSet() MySQLDataAdaptor = new MySQLDataAdaptor(); MySQLDataAdaptor.Connection = myConnection; MySQLDataAdaptor.Command = myCommand; myConnection.Open(); MySQLDataAdaptor.Fill(myDataSet); if (myDataSet.Tables.Count>0) DataGridView.DataSource = myDataSet.Tables[0];
Skype — wmaster_s E-Mail — WorldMasters@gmail.com
Работаем по 3 критериям — быстро, качественно, недорого. Заказчик выбирает любые два.
| WorldMaster |
| Посмотреть профиль |
| Найти ещё сообщения от WorldMaster |
программирователь
Пользователь
Регистрация: 15.02.2009
Сообщений: 72
Сделал иначе. Данные класса:
string connStr = "server=localhost;user=root;password=root;database=jourl"; private BindingSource bindingSorce = new BindingSource();
Собственно, сам метод нажатия на кнопку:
private void button3_Click(object sender, EventArgs e)
Такой вопрос: какой из способов лучше? Читал, что лучше всего работать через .net коннектор с оф.сайта mysql. Задача — есть БД, структура которой никогда не изменяется. Нужно много разных клиентских приложений, которые будут делаться постоянно. Хотелось бы узнать, какая технология доступа к данным будет лучше и надежнее.
Регистрация: 25.08.2011
Сообщений: 2,841
Сообщение от sinj
Такой вопрос: какой из способов лучше? Читал, что лучше всего работать через .net коннектор с оф.сайта mysql. Задача — есть БД, структура которой никогда не изменяется. Нужно много разных клиентских приложений, которые будут делаться постоянно. Хотелось бы узнать, какая технология доступа к данным будет лучше и надежнее.
От Вашего BindingSource в данном случае толку никакого. Лишний узел для передачи таблицы. Ну в общем то дело Ваше.
По поводу «лучше», а кто сказал что .net коненктор лучше. Просто с ним удобнее всего работать. Вообще нету никакой разницы в адапторах. SQL один для всех. В любом случае все запросы вы будете делать через него.
А других способов подключения к базе данных кроме указанныго я не знаю, подскажите если кто найдет.
Skype — wmaster_s E-Mail — WorldMasters@gmail.com
Работаем по 3 критериям — быстро, качественно, недорого. Заказчик выбирает любые два.
| WorldMaster |
| Посмотреть профиль |
| Найти ещё сообщения от WorldMaster |
