Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > .NET > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 09.07.2012, 17:20   #1
IgorDaiko
 
Регистрация: 02.07.2012
Сообщений: 8
По умолчанию Работа с DataGridView

Здравствуйте у меня вопрос как сделать что бы с присоединенного к полю таблицы БД TextBox, после введения в него текста он появлялся в DataGridView? И еще один вопрос как сделать что бы введенная информация в DataGridView сохранялась в БД? Спасибо зарание.
IgorDaiko вне форума Ответить с цитированием
Старый 09.07.2012, 18:38   #2
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Для добавлению нужно вызвать у BindingSource AddNew, заполнить все столбцы и вызвать метод EndEdit.

Для сохранения изменений нужно вызвать метод Update у адаптера данных.
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 09.07.2012, 18:47   #3
IgorDaiko
 
Регистрация: 02.07.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Петррр Посмотреть сообщение
Для добавлению нужно вызвать у BindingSource AddNew, заполнить все столбцы и вызвать метод EndEdit.

Для сохранения изменений нужно вызвать метод Update у адаптера данных.
множа на счет первого поподробнее?
IgorDaiko вне форума Ответить с цитированием
Старый 09.07.2012, 19:23   #4
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Мой ответ опирается на мою фантазию. Я не знаю каким образом были отображены данные в DataGridView. Я обычно делал это через BindingSource. BindingSource связываете с DataTable в DataSet.

Сложно сказать, я не вижу Вашего кода.
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 09.07.2012, 19:55   #5
IgorDaiko
 
Регистрация: 02.07.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Петррр Посмотреть сообщение
Мой ответ опирается на мою фантазию. Я не знаю каким образом были отображены данные в DataGridView. Я обычно делал это через BindingSource. BindingSource связываете с DataTable в DataSet.

Сложно сказать, я не вижу Вашего кода.
Вы наверное не до конца поняли мой вопрос, мне как раз нужно отобразить данные в DataGridView. Я их ввожу в тексбокс и мне нужно что бы они отображались в DataGridView.
IgorDaiko вне форума Ответить с цитированием
Старый 09.07.2012, 19:56   #6
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

К БД как подцепились?
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 09.07.2012, 19:59   #7
IgorDaiko
 
Регистрация: 02.07.2012
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Петррр Посмотреть сообщение
К БД как подцепились?
BindingSource=>свойство DataSource=> mydb
IgorDaiko вне форума Ответить с цитированием
Старый 09.07.2012, 20:19   #8
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

Код:
using System;
using System.Data;
using System.Data.SqlServerCe;
using System.Windows.Forms;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        // Адаптер данных
        SqlCeDataAdapter adapter;
        // Коннетор
        SqlCeConnection connection;
        // Набор таблиц
        DataSet dataSet;
        // Название таблицы
        readonly string tableName = "Categories";
        // Привязка данных
        BindingSource bindingSource;

        public Form1()
        {
            InitializeComponent();
            // Соединение с БД
            connection = new SqlCeConnection("Data Source=E:\\Northwind.sdf");
            // Выборка
            adapter = new SqlCeDataAdapter("SELECT * FROM Categories", connection);
            // Запрос на вставку
            adapter.InsertCommand = new SqlCeCommand("INSERT INTO Categories ([Category Name], Description) VALUES (@category, @description)", connection);
            // Заполнение параметров
            adapter.InsertCommand.Parameters.Add("@category", SqlDbType.NVarChar, 15, "Category name");
            adapter.InsertCommand.Parameters.Add("@description", SqlDbType.NVarChar, 536870911, "Description");
            // Создание набора таблиц
            dataSet = new DataSet();
            // Заполнение таблицы
            adapter.Fill(dataSet, tableName);
            // Привязка к таблице
            bindingSource = new BindingSource(dataSet, tableName);
            // Привязка DataGridView к данным
            dataGridView1.DataSource = bindingSource;
            // Привязка TextBox к названию категории
            textBoxCategoryName.DataBindings.Add("Text", bindingSource, "Category name");
            // Привязка TextBox к описанию
            textBoxDescription.DataBindings.Add("Text", bindingSource, "Description");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Добавление новой строки
            bindingSource.AddNew();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // Не нужно по сути
            (bindingSource.Current as DataRowView).Row["Picture"] = DBNull.Value;
            // Окончание редактирования строки
            bindingSource.EndEdit();
            // Обновление источника данных
            adapter.Update(dataSet, tableName);
        }
    }
}
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть
Петррр вне форума Ответить с цитированием
Старый 09.07.2012, 21:46   #9
IgorDaiko
 
Регистрация: 02.07.2012
Сообщений: 8
По умолчанию

вопрос 1. зачем вот это делать:
Цитата:
adapter.InsertCommand = new SqlCeCommand("INSERT INTO Categories ([Category Name], Description) VALUES (@category, @description)", connection);
// Заполнение параметров
adapter.InsertCommand.Parameters.Ad d("@category", SqlDbType.NVarChar, 15, "Category name");
adapter.InsertCommand.Parameters.Ad d("@description", SqlDbType.NVarChar, 536870911, "Description");
Вопрос 2: почему название таблицы readonly
И вопрос 3: Я так понял [Category Name], Description это название столбцов таблицы?

Последний раз редактировалось IgorDaiko; 09.07.2012 в 21:57.
IgorDaiko вне форума Ответить с цитированием
Старый 09.07.2012, 21:59   #10
Петррр
Форумчанин
 
Аватар для Петррр
 
Регистрация: 02.09.2011
Сообщений: 336
По умолчанию

1. Если Вы этого не сделаете, при вызове метода Update у Вас вылетит исключнию о том, что Вы не реализовали команду вставки. Тоже самое нужно сделать на обновление, удаление.
2. Дело вкуса.

P.S. Вообще я бы рекомендовал использовать Linq To Sql, но судя по тому что Вы не понимаете начальных стадий, до этого еще далеко.

Там, кстати, от этого readonly никакого толка нет.
Если ты не можешь найти то, ради чего стоит жить, лучше найти то, за что стоит умереть

Последний раз редактировалось Петррр; 09.07.2012 в 22:02.
Петррр вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
datagridview ttwork Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 4 06.01.2012 06:28
C# DataGridView Sanuch89 Помощь студентам 2 04.08.2011 12:52
Работа с DataGridView in VB .NET Фёдор90 Общие вопросы .NET 0 12.06.2010 00:25
C#, datagridView Namolem Помощь студентам 1 12.05.2010 01:18
работа с dataGridView Cpluser Общие вопросы .NET 2 04.11.2009 17:04