Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
maik09
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 29
1

При загрузке формы не выводятся значения из таблицы в dataGridView

28.01.2014, 13:27. Просмотров 1461. Ответов 10
Метки нет (Все метки)

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Drawing.Printing;
 
 
 
namespace WindowsFormsApplication3
{
     
    
 
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
       
  private void Form1_Load(object sender, EventArgs e)
        {
 
            dataGridView.RowHeadersVisible = false;
            string mytablename = "table"; //Название таблицы
            string dirName = System.IO.Directory.GetCurrentDirectory();
            string mybdpath = dirName + "\\base.mdb"; //Тут название базы, её надо кинуть в путь
            string conStr = "Provider=Microsoft.Jet.OLEDB.12.0;Data Source=" + mybdpath;
            OleDbConnection connection = new OleDbConnection(conStr);
            OleDbDataAdapter adapter = new OleDbDataAdapter();
 
            connection.Open();
            OleDbCommand command = new OleDbCommand("SELECT * FROM  ["+ mytablename+"]", connection);
            connection.Close();
 
            adapter.SelectCommand = command;
            DataSet dataSet = new DataSet();
            adapter.Fill(dataSet);
            dataGridView.DataSource = dataSet.Tables[0];
            adapter.Update(dataSet);
            
        }
       
 
 
        private void cmdDob_Click(object sender, EventArgs e)
        {
            string mytablename = "table";
            string procPath = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
            string dirName = System.IO.Directory.GetCurrentDirectory();
            string mybdpath = dirName + "\\base.mdb";
            string conStr = " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + mybdpath;
            string kod1 = txtkod.Text;
            string art1 = txtart.Text;
            string nom1 = txtnom.Text;
            string nal1 = "";
            if (rbIM.Checked)
            {
                nal1 = "В наличии.";
            }
            if (rbSCL.Checked)
            {
                nal1 = "На складе.";
            }
            string zam1 = txtVIN.Text;
            string proiz1 = txtzam.Text;
            string ornom1 = txtproiz.Text;
            string kol1 = kol.Text;
            decimal cen1 = txtcen.Value;
            string tip1 = cbtip.Text;
            int ii = dataGridView.Rows.Count;
            
           
                OleDbConnection connection = new OleDbConnection(conStr);
                OleDbCommand command = new OleDbCommand("INSERT   INTO [" + mytablename + "]  ([Код], [Артикул], [Номенклатура], [Оригинальный номер(VIN)], [Номер замены], [Производитель], [Наличие], [Колличество], [Цена], [Тип]) VALUES ('" + kod1 + "', '" + art1 + "', '" + nom1 + "', '" + ornom1 + "', '" + zam1 + "','" + proiz1 + "','" + nal1 + "', '" + kol1 + "', '" + cen1 + "', '"+ tip1 +"')", connection);
                command.Connection.Open();
                command.ExecuteNonQuery();
                command.Connection.Close();
 
 
                OleDbDataAdapter adapter = new OleDbDataAdapter();
 
                connection.Open();
                OleDbCommand command1 = new OleDbCommand("SELECT * FROM [" + mytablename+"]" , connection);
                connection.Close();
 
                adapter.SelectCommand = command1;
                DataSet dataSet = new DataSet();
                adapter.Fill(dataSet);
                dataGridView.DataSource = dataSet.Tables[0];
                adapter.Update(dataSet);
 
                txtkod.Text = "";
                txtart.Text = "";
                txtnom.Text = "";
                txtzam.Text = "";
                txtproiz.Text = "";
                kol.Value = 0;
                txtcen.Text = "";
            }
 
      
 
       
            
 
        }
почему при загрузке формы не выводятся значения из таблицы в dataGridView?а при добавлении вот что получается
0
Миниатюры
При загрузке формы не выводятся значения из таблицы в dataGridView   При загрузке формы не выводятся значения из таблицы в dataGridView  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 13:27
Ответы с готовыми решениями:

Изменение свойств CheckBox в DataGridView при загрузке формы
Здравствуйте, У меня в DataGridView есть колонка с непривязанными к источнику данных чекбоксами....

Ошибки при загрузке формы послеизменения структуры таблицы
Здравствуйте. У меня выросла проблема при создании БД в Аксесс 2013. Есть таблица Документы с...

Вывод значения в comboBox при загрузке формы
Доброго времени суток! Как сделать, чтобы при открытии формы в comboBox уже отображалось...

При загрузке формы не могу получить значения полей
проблема следующая: из одной формы, по нажатию кнопки, запускается другая и поля заполняются...

Присвоение текстового значения полю при загрузке формы
Добрый день! Подскажите пожалуйста следующее: Имеем в форме поля: Деталь, Количество, ...

10
maik09
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 29
28.01.2014, 13:27  [ТС] 2
помогите кто может, заранее благодарен!
0
kodv
1425 / 1098 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
28.01.2014, 16:03 3
maik09, Исключения ADO.NET проглатываются приложениями на .NET, но это не значит, что их нет. Если какой то объект .NET генерирует исчклюение, то весь код, которых находится до конца метода не выполняется. Например, провайдера "Microsoft.Jet.OLEDB.12.0" не существует, но вы пытаетесь его использовать. Из-за этого строкf connection.Open(); вызывает исключение, после чего не проихсодит не создание комманды, на заполенния таблицы в датасете не связывание этой таблице с DataGridView. Если не верите, оберните внутренности метода Load в try-catch. При добавлении вы используете верного провайдера, поэтому данные из базы подгружаются.
1
maik09
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 29
28.01.2014, 21:06  [ТС] 4
все теперь данные загружаются, но при добавлении они смещаются, как на картинке показывал!
0
nio
5969 / 3375 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
28.01.2014, 23:53 5
Вот это место смущает
Цитата Сообщение от maik09 Посмотреть сообщение
C#
1
2
3
adapter.Fill(dataSet);
dataGridView.DataSource = dataSet.Tables[0];
adapter.Update(dataSet);
Тут происходит выборка из БД, и мгновенное сохранение обратно.

Добавлено через 1 минуту
и вот это почитай Пропадают данные из БД после перезагрузки компьютера
0
Павлик Морозов
119 / 121 / 39
Регистрация: 26.10.2012
Сообщений: 410
Завершенные тесты: 1
29.01.2014, 00:04 6
Цитата Сообщение от maik09 Посмотреть сообщение
все теперь данные загружаются, но при добавлении они смещаются, как на картинке показывал!

Я подозреваю, что проблема кроется вот здесь:
C#
1
OleDbCommand command = new OleDbCommand("SELECT * FROM  ["+ mytablename+"]", connection);
Вместо * перечисли поля для выборки, тогда нормально все будет. Далее:
C#
1
2
3
4
5
6
7
8
9
connection.Open();
OleDbCommand command1 = new OleDbCommand("SELECT * FROM [" + mytablename+"]" , connection);
connection.Close();
 
adapter.SelectCommand = command1;
DataSet dataSet = new DataSet();
adapter.Fill(dataSet);
dataGridView.DataSource = dataSet.Tables[0];
adapter.Update(dataSet);
Строки 1 и 3 выбрось из кода. Они тебе не нужны, ибо адаптер сам откроет соединение, когда будет читать данные из БД. И вызов метода Update() у адаптера так же не нужен, потому что у тебя нет измененных данных, ты только прочитал их из базы.

C#
1
2
3
string procPath = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
string dirName = System.IO.Directory.GetCurrentDirectory();
string mybdpath = dirName + "\\base.mdb";
Этот хаос замени строчкой:
C#
1
string mydbpath = Application.StartupPath + @"\base.mdb";

Ежели решил использовать адаптер, и датасет, то используй их полностью, а не бог знает как. Добавление данных делай так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
//Экземпляр класса DataSet объявляй не в методе, а при создании класса, что бы он был доступен во всех местах формы
DataRow _row = dataSet.Tables[0].NewRow();
_row["Код"] = txtkod.Text;
_row["Артикул"] = txtart.Text;
//по аналогии добавляешь остальные параметры в строку
dataSet.Tables[0].Rows.Add(_row); //Добавляешь строку данных в коллекцию
//Заносишь изменения в БД
//Создаешь в адаптере команду на вставку данных
OleDbCommand command = new OleDbCommand("INSERT   INTO [" + mytablename + "]...." //Дальше по тексту
adapter.InsertCommand = command;
adapter.Update(dataset.Tables[0]);
//Указываешь, что данные сохранены
dataSet.AcceptChanges();
Примерно так должно быть
1
kodv
1425 / 1098 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
29.01.2014, 04:06 7
maik09, если вы говорите про то, что появляется столбец id, который вы не делали видимым, то это проихсодит из-за того, что вы при каждом обновлении по новой задаете DataSource у DataGridView. Когда свойству DataSource присваивается новое значение, то имеющаяся коллекция столбцов удаляется, а вместо нее создается новая на основе столбцов нового DataSource. Поэтому, чтобы у вас всегда отображались столбцы так, как вы это настроили в дизайнере, вам и DataSource тоже нужно задавать в дизайнере и не трогать.
1
maik09
0 / 0 / 0
Регистрация: 05.11.2013
Сообщений: 29
29.01.2014, 09:08  [ТС] 8
исправил все что сказали, ошибка не исчезла, данные все равно смещаюся(

Добавлено через 18 минут
все сделал, спасибо всем кто помог)))
0
harusame
1 / 1 / 0
Регистрация: 24.10.2012
Сообщений: 17
02.02.2014, 15:42 9
решил я попытаться сделать все как у автора поста. Но у меня ничего не вышло.. при запуске дебага выбивает ошибку.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.RowHeadersVisible = false;
            string mytablename = "table"; //Название таблицы
            string dirName = System.IO.Directory.GetCurrentDirectory();
            string mybdpath = dirName + "\\Database.mdb"; //Тут название базы, её надо кинуть в путь
            string conStr = "Provider=Microsoft.Jet.OLEDB.12.0;Data Source=" + mybdpath;
            OleDbConnection connection = new OleDbConnection(conStr);
            OleDbDataAdapter adapter = new OleDbDataAdapter();
 
            OleDbCommand command = new OleDbCommand("SELECT * FROM  [" + mytablename + "]", connection);
 
            adapter.SelectCommand = command;
            DataSet dataSet = new DataSet();
            adapter.Fill(dataSet);
            dataGridView1.DataSource = dataSet.Tables[0];
        }
а именно останавливается процесс дебага на строчке
C#
1
adapter.Fill(dataSet);
ниже исключения из буфера обмена:
Кликните здесь для просмотра всего текста
System.InvalidOperationException не обработано
Message=Для поставщика OLE DB данных .Net Framework Data Providers требуются компоненты доступа к данным Майкрософт (MDAC). Установите компоненты Microsoft Data Access Components MDAC version 2.6 или более поздней версии.
Source=System.Data
StackTrace:
в System.Data.OleDb.OleDbConnectionInternal.GetObjectPool()
в System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
в System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
в System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
в System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
в System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
в System.Data.OleDb.OleDbConnection.Open()
в System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
в System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
в System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
в PantryAccounts_GenPas.Form1.Form1_Load(Object sender, EventArgs e) в c:\documents and settings\администратор\мои документы\visual studio 2010\Projects\PantryAccounts_GenPas\PantryAccounts_GenPas\Form1.cs:строка 79
в System.Windows.Forms.Form.OnLoad(EventArgs e)
в System.Windows.Forms.Form.OnCreateControl()
в System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
в System.Windows.Forms.Control.CreateControl()
в System.Windows.Forms.Control.WmShowWindow(Message& m)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.Form.WmShowWindow(Message& m)
в System.Windows.Forms.Form.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
в System.Windows.Forms.SafeNativeMethods.ShowWindow(HandleRef hWnd, Int32 nCmdShow)
в System.Windows.Forms.Control.SetVisibleCore(Boolean value)
в System.Windows.Forms.Form.SetVisibleCore(Boolean value)
в System.Windows.Forms.Control.set_Visible(Boolean value)
в System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
в System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
в System.Windows.Forms.Application.Run(Form mainForm)
в PantryAccounts_GenPas.Program.Main() в c:\documents and settings\администратор\мои документы\visual studio 2010\Projects\PantryAccounts_GenPas\PantryAccounts_GenPas\Program.cs:строка 18
в System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
в System.Threading.ThreadHelper.ThreadStart()
InnerException: System.Runtime.InteropServices.COMException
Message=Не удалось получить фабрику класса COM для компонента с CLSID {2206CDB2-19C1-11D1-89E0-00C04FD7A829} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Source=mscorlib
ErrorCode=-2147221164
StackTrace:
в System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
в System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache)
в System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache)
в System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly)
в System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
в System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
в System.Data.OleDb.OleDbConnectionInternal.CreateInstanceDataLinks()
в System.Data.OleDb.OleDbConnectionInternal.GetObjectPool()
InnerException:


Помогите разобраться в чем причина.
Пожалуйста постарайтесь объяснить так чтоб даже школьник никогда такого не делавший смог все понять.
0
kodv
1425 / 1098 / 344
Регистрация: 11.04.2011
Сообщений: 2,606
Завершенные тесты: 1
02.02.2014, 17:45 10
harusame, а дальше первого поста прочитать? Я же в первом же ответе написал, что не существует провайдера microsoft.jet.oledb.12.0. А вы все равно его пытаетесь использовать ... Попробуйте microsoft.jet.oledb.4.0 или microsoft.ace.oledb.12.0.
0
harusame
1 / 1 / 0
Регистрация: 24.10.2012
Сообщений: 17
02.02.2014, 18:40 11
ничего не изменилось. в тех же местах дебаг останавливается указывая что эти строки ошибочны

вот код того что у меня:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
private void Form1_Load(object sender, EventArgs e)
        {
            dataGridView1.RowHeadersVisible = false;
            string mytablename = "table"; //Название таблицы
            string dirName = System.IO.Directory.GetCurrentDirectory();
            string mybdpath = dirName + "\\Database.mdb"; //Тут название базы, её надо кинуть в путь
            string conStr = "Provider=microsoft.ace.oledb.12.0;Data Source=" + mybdpath;
            OleDbConnection connection = new OleDbConnection(conStr);
            OleDbDataAdapter adapter = new OleDbDataAdapter();
 
            OleDbCommand command = new OleDbCommand("SELECT * FROM  [" + mytablename + "]", connection);
 
            adapter.SelectCommand = command;
            DataSet dataSet = new DataSet();
            adapter.Fill(dataSet);
            dataGridView1.DataSource = dataSet.Tables;
        }
 
        private void cmdDob_Click(object sender, EventArgs e)
        {
            string mytablename = "table";
            string procPath = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
            string dirName = System.IO.Directory.GetCurrentDirectory();
            string mybdpath = dirName + "\\base.mdb";
            string conStr = " Provider=microsoft.ace.oledb.12.0;Data Source=" + mybdpath;
            string reskod1 = txtreskod.Text;
            string loginart1 = txtloginart.Text;
            string passnom1 = txtpassnom.Text;
            int ii = dataGridView1.Rows.Count;
 
 
            OleDbConnection connection = new OleDbConnection(conStr);
            OleDbCommand command = new OleDbCommand("INSERT   INTO [" + mytablename + "]  ([Ресурс], [Логин], [Пароль]) VALUES ('" + reskod1 + "', '" + loginart1 + "', '" + passnom1 + "')", connection);
            command.Connection.Open();
            command.ExecuteNonQuery();
            command.Connection.Close();
 
 
            OleDbDataAdapter adapter = new OleDbDataAdapter();
 
            
            OleDbCommand command1 = new OleDbCommand("SELECT * FROM [" + mytablename + "]", connection);
            connection.Close();
 
            adapter.SelectCommand = command1;
            DataSet dataSet = new DataSet();
            adapter.Fill(dataSet);
            dataGridView1.DataSource = dataSet.Tables;
            adapter.Update(dataSet);
 
            txtreskod.Text = "";
            txtloginart.Text = "";
            txtpassnom.Text = "";
        }
Буду благодарен если поможете разобраться в этом.
0
02.02.2014, 18:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2014, 18:40

Как при загрузке формы в combobox'е автоматически выставить значения из скрытого столбца
Привет, Заполнил datagridview из mssql - ok Создал DataGridViewComboBoxColumn() данные из sql...

Как при загрузке формы, передать последнюю строку из таблицы (DBgrid) в тескстовое поле (text1)?
Ребята! подскажите как при загрузке формы, передать последнюю строку из таблицы (DBgrid) в...

При загрузки формы данные из первой таблицы вывести в DataGridView
Народ, помогите увидеть ошибку! у меня две таблицы Автопарк и Состав_поставки нужно чтобы при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru