Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обновление dataGridView после INSERT / 17 сообщений из 17, страница 1 из 1
18.10.2013, 13:25
    #38432777
SerjInsane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
новая запись вносится в БД, но в dataGridView не отображается. помогите разобраться.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
        SqlConnection dbConnection;
        SqlDataAdapter IncomeAdap;
        DataSet HouseAccDS;
        public MainForm()
        {
            InitializeComponent();
            dbConnection = new SqlConnection(FamilyMoney.Properties.Settings.Default.HouseAccountsConnectionString);
            dbConnection.Open();            
            IncomeAdap = new SqlDataAdapter("SELECT * FROM Income", dbConnection);
            HouseAccDS = new DataSet();
            IncomeAdap.Fill(HouseAccDS, "Income");
            dataGridViewIncome.DataSource = HouseAccDS.Tables["Income"];
        }
        // метод для Insert
        public void insertIncome(DateTime date, string name, string cath, long sum)
        {            
            IncomeAdap.InsertCommand = new SqlCommand("INSERT INTO Income VALUES(@date, @name, @cath, @sum)", dbConnection);
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@date", date));
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@name", name));
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@cath", cath));
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@sum", sum));
            IncomeAdap.InsertCommand.ExecuteNonQuery();
            IncomeAdap.Update(HouseAccDS, "Income");
        }
...
Рейтинг: 0 / 0
18.10.2013, 13:42
    #38432809
fortibransa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
Попробуй что-то типа
Код: c#
1.
IncomeAdap.InsertCommand = new SqlCommand("INSERT INTO Income VALUES(@date, @name, @cath, @sum);SELECT * FROM Income WHERE date = @date AND cath = @cath AND sum = @sum"


Короче через ; надо написать SELECT с нужными полями (которые в SelectCommand) ну и условие выбора
...
Рейтинг: 0 / 0
18.10.2013, 14:00
    #38432847
SerjInsane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
fortibransa,

сделал как было предложено, вот код который я изменил:

Код: c#
1.
2.
3.
4.
IncomeAdap.InsertCommand = new SqlCommand("INSERT INTO Income VALUES(@date, @name, @cath, @sum);" +
                                                      "SELECT * FROM Income WHERE Дата = @date AND " +
                                                      "[Член семьи] = @name AND [Категория дохода] = @cath AND " +           
                                                      "[Сумма, руб] = @sum", dbConnection);


но ничего не изменилось. в dataGridView все равно новая строка не добавляется.
...
Рейтинг: 0 / 0
18.10.2013, 14:52
    #38432941
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
SerjInsane,

после Update снова сделай
Код: c#
1.
dataGridViewIncome.DataSource = HouseAccDS.Tables["Income"];
...
Рейтинг: 0 / 0
18.10.2013, 15:02
    #38432954
SerjInsane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
Pallaris,

сделал, теперь все выглядит так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public void insertIncome(DateTime date, string name, string cath, long sum)
        { 
            IncomeAdap.InsertCommand = new SqlCommand("INSERT INTO Income VALUES(@date, @name, @cath, @sum);" +
                                                      "SELECT * FROM Income WHERE Дата = @date AND " +
                                                      "[Член семьи] = @name AND [Категория дохода] = @cath AND " +           
                                                      "[Сумма, руб] = @sum", dbConnection);
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@date", date));
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@name", name));
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@cath", cath));
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@sum", sum));
            IncomeAdap.InsertCommand.ExecuteNonQuery();
            IncomeAdap.Update(HouseAccDS, "Income");
            dataGridViewIncome.DataSource = HouseAccDS.Tables["Income"];


но dataGridView все равно не обновляется.
...
Рейтинг: 0 / 0
18.10.2013, 15:07
    #38432967
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
SerjInsane,

а в базу попадает? select из InsertComand убери, это ересь
...
Рейтинг: 0 / 0
18.10.2013, 15:08
    #38432969
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
SerjInsanePallaris,

Код: c#
1.
            IncomeAdap.InsertCommand.ExecuteNonQuery();




Это тоже убери
...
Рейтинг: 0 / 0
18.10.2013, 15:12
    #38432977
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
Ты вообще откуда свой insertIncome вызываешь?
...
Рейтинг: 0 / 0
18.10.2013, 15:18
    #38432989
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
SerjInsane
Код: c#
1.
2.
3.
                                                      "SELECT * FROM Income WHERE Дата = @date AND " +
                                                      "[Член семьи] = @name AND [Категория дохода] = @cath AND " +           
                                                      "[Сумма, руб] = @sum", dbConnection);




А чего название таблицы Income какой-то, а не Доход или Приход. Раз уж поля в таблице "[Сумма, руб]" и "[Член семьи]"
...
Рейтинг: 0 / 0
18.10.2013, 18:49
    #38433384
SerjInsane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
PallarisSerjInsanePallaris,

Код: c#
1.
            IncomeAdap.InsertCommand.ExecuteNonQuery();




Это тоже убери
если это убрать, то INSERT в таблицу не происходит.

PallarisТы вообще откуда свой insertIncome вызываешь?
из побочной формы считываю текстбоксы и кнопкой вызываю этот метод.
...
Рейтинг: 0 / 0
18.10.2013, 20:24
    #38433464
igr_ok
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
SerjInsaneновая запись вносится в БД, но в dataGridView не отображается. помогите разобраться.
dataGridView связан с HouseAccDS.Tables["Income"]. И пока данные в DataTable не обновятся, ничего не изменится. Самый простой способ-это еще раз вызвать IncomeAdap.Fill(HouseAccDS, "Income"). Перед этим почистив Datatable с помощью .Rows.Clear()
Но правильнее было бы сформировать корректные методы для DataTable: Insert,Update,Delete. С помощью дизайнера или класса CommandBuilder. Вносить изменения в DataTable, а потом в БД методом DataAdapter.Update. А обновлять данные методом dataGridView.Refresh()
...
Рейтинг: 0 / 0
18.10.2013, 20:48
    #38433479
SerjInsane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
igr_okSerjInsaneновая запись вносится в БД, но в dataGridView не отображается. помогите разобраться.
dataGridView связан с HouseAccDS.Tables["Income"]. И пока данные в DataTable не обновятся, ничего не изменится. Самый простой способ-это еще раз вызвать IncomeAdap.Fill(HouseAccDS, "Income"). Перед этим почистив Datatable с помощью .Rows.Clear()
Но правильнее было бы сформировать корректные методы для DataTable: Insert,Update,Delete. С помощью дизайнера или класса CommandBuilder. Вносить изменения в DataTable, а потом в БД методом DataAdapter.Update. А обновлять данные методом dataGridView.Refresh()

теперь сделал так, как я понял предлагалось в первом решении. но проблема та же.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
IncomeAdap.InsertCommand = new SqlCommand("INSERT INTO Income VALUES(@date, @name, @cath, @sum);" +
                                                      "SELECT * FROM Income WHERE Дата = @date AND " +
                                                      "[Член семьи] = @name AND [Категория дохода] = @cath AND " +           
                                                      "[Сумма, руб] = @sum", dbConnection);
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@date", date));
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@name", name));
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@cath", cath));
            IncomeAdap.InsertCommand.Parameters.Add(new SqlParameter("@sum", sum));
            IncomeAdap.InsertCommand.ExecuteNonQuery();
            HouseAccDS.Tables["Income"].Rows.Clear();
            IncomeAdap.Fill(HouseAccDS, "Income");            
            dataGridViewIncome.DataSource = HouseAccDS.Tables["Income"];
...
Рейтинг: 0 / 0
18.10.2013, 20:51
    #38433482
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
SerjInsaneесли это убрать, то INSERT в таблицу не происходит.


При создании адаптера ему нужно прописать InsertCommand. Она вызовется автоматически при adapter.Update, если произошло добавление строки в DataTable, связанной с адаптером (например, через GridView)
...
Рейтинг: 0 / 0
18.10.2013, 20:57
    #38433489
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
SerjInsaneиз побочной формы считываю текстбоксы и кнопкой вызываю этот метод.

Тебе надо не этот метод вызывать, а добавить в свою программу BindingSource. У BindingSource присвоить DataSource = твой "Income" . Сделать также DataGridView.DataSource = BindingSource.

По кнопке вызывать BindingSource.AddNew.

Добавить кнопку "Сохранить", в которой вызывать IncomeAdap.Update(HouseAccDS, "Income");
...
Рейтинг: 0 / 0
18.10.2013, 22:39
    #38433563
SerjInsane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
PallarisSerjInsaneиз побочной формы считываю текстбоксы и кнопкой вызываю этот метод.

Тебе надо не этот метод вызывать, а добавить в свою программу BindingSource. У BindingSource присвоить DataSource = твой "Income" . Сделать также DataGridView.DataSource = BindingSource.

По кнопке вызывать BindingSource.AddNew.

Добавить кнопку "Сохранить", в которой вызывать IncomeAdap.Update(HouseAccDS, "Income");
а можно немного подробней расписать, что надо делать в основной форме, а что в побочной?
...
Рейтинг: 0 / 0
19.10.2013, 14:10
    #38433904
Артем G
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
Вот ведь усложнил то все. Все что ты делаешь прекрасно делает дизайнер.

Разберись с

1 DataSet, DataTable - Как получить список Измененные, Удаленные, Добавленные строки
2 TableAdapter - как в нем создавать запросы с параметрами
3 BindingSource - Как добавляя записи в DataGridView добавлять, изменять Записи в DataTable через DataView

И будет тебе счастье.



Несколько примеров которые должны будут помочь если пересмотришь свой подход


1 DataSet

Dim IdeasDelete() As DataRow = Me.DS2.Ideas.Select(Nothing, Nothing, DataViewRowState.Deleted)
If IdeasDelete.Length > 0 Then Me.TAIdeas.Update(IdeasDelete)


2

SELECT *
FROM DT
WHERE DTID IN (SELECT DTID
FROM Invoice
WHERE (InvoiceDate BETWEEN @D1 AND @D2) AND (Posted = 1)))


3 BindingSource

Dim DV As New DataView(DS2.Ideas)
Dim DRV As DataRowView = DV.AddNew()

DRV("idOwner") = 1
DRV("DateCreation") = Now
DRV.EndEdit()

DV.ToTable()
...
Рейтинг: 0 / 0
19.10.2013, 18:25
    #38434040
SerjInsane
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Обновление dataGridView после INSERT
Спасибо за подсказки, буду разбираться.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Обновление dataGridView после INSERT / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]