Всем привет! доброе утро, полдень, вечер!
я еще учусь писать приложения на C# при помощи Visual Studio
сейчас решил перейти к изучению работы с базами данных и обработке их данных на формах виндовс
так вот не знаю насколько верно я все сделал (код приложу ниже) но как то немного как по моему притормаживает все это добро!
в общем создал таблицу в которой два столбца id | valume
создал в таблице 522 000 записей, на форме создал кнопку и dataGridView1
повесил событие на кнопку в котором выполняю код (который в свою очередь запрашивает все записи из моей таблицы) (если что работаю на SSD диске не знаю насколько это необходимо для работы с БД но решил все таки пометить)
так вот все это добро выполняется за 8 (восемь) секунд (я имею в виду заполняется и показывает в таблице dataGridView1 заполненные строки через восемь секунд) подскажите нельзя ли как то увеличить скорость вывода инфы?
(я писал без вывода инфы на форму просто написал получение всех записей из БД затем перебирал каждую в цикле
и без вывода в dataGridView1 функция отрабатывает менее секунды) из этого пришел к выводу чтение данных и SQLite происходит моментально остальную часть чуть более 7 секунд занимает видимо выгрузка данных в dataGridView1 и вывод инфы на экран )
помогите если возможно ускорить вывод данных в dataGridView1 (или может нужно использовать что то другое?)
ну вот мой код
Код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.Common;
using System.Data.SQLite;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
private SQLiteConnection con;
private SQLiteCommand cmd;
private DataTable dt;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
con = new SQLiteConnection();
con.ConnectionString = @"Data Source=cyber.db;New=False;Version=3";
cmd = new SQLiteCommand();
cmd.Connection = con;
dt = new DataTable();
dataGridView1.DataSource = dt;
con.Open();
cmd.CommandText = "SELECT * FROM example";
dt.Clear();
dt.Load(cmd.ExecuteReader());
con.Close();
if (dataGridView1.Columns[0].HeaderText == "id")
{
dataGridView1.Columns[0].HeaderText = "Код";
}
if (dataGridView1.Columns[1].HeaderText == "value")
{
dataGridView1.Columns[1].HeaderText = "Наименование";
}
}
private void dataGridView1_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
int currentRow = dataGridView1.CurrentRow.Index; // номер строки, по которой кликнули
MessageBox.Show("Вы жмякнули по строке содержащей - " + dataGridView1[1, currentRow].Value.ToString());
}
}
}
Добавлено (02 Ноября 2018, 03:24)
---------------------------------------------
Так же напишу здесь:
меня интересует следующая реализация.
Как видно в коде что выше, есть еще одна функция которая отрабатывает при двойном клике по строке на dataGridView1.
Сейчас я вешаю в эту функцию открытие дополнительной формы (пока модальной) и передаю в нее данные выбранной строки
чего хочу добиться.
открывается вторая форма где я заношу в переменные выбранные данные пусть это будет пока id (код товара) и value (наименование) так вот пусть я изменил наименования нажал на кнопку сохранить и закрыть. и когда форма редактирования (моя вторая форма) закроется мне необходимо показать измененные данные по строке в dataGridView1 (вот здесь я побаиваюсь если я буду стартовать функцию очистки dataGridView1 затем ее повторное заполнение (повторное заполнение необходимо в любом случает так как вероятно другой юзер добавил новый товар в базу (но это потом) ) так вот выходит что после каждого редактирования строки выходит что мне придется ждать около 8 секунд? либо же после каждого обновления данных в dataGridView1
отсюда вытекает все тот же вопрос как ускорить все это дело?
как правильно обновлять данные в dataGridView1 (получать новые данные) (возможно ли обновлять данные дополняя их а не чисткой dataGridView1 и ее повторным заполнением)?
и еще вопрос ) (простите что вываливаю все и сразу)
в моем тексте выше проскакивало слово товары (приложение я пишу простенькую програмку учета товаров на складах)
к чему хочу прийти и чему хочу научиться.
1. програмка должна уметь следующее: Иметь справочник товаров с группировкой по группам товаров).
2. иметь документ поступление товаров и реализация товаров
3. иметь возможность двигать данные товары по складу (приход - расход)
4. отчеты о продажах за период и остатки товаров
так вот что бы я все это добро смог сделать мне необходимо
1. решить вопрос со скоростью работы программы (почему выбрал именно SQlite она как я понимаю бесплатная а меня именно это и интересует - если есть более быстрые базы данных то предложите спасибо)
2. сделать справочник товаров так что бы в нем была группировка по товарам ( что то типа такого (попробую описать)
на форме dataGridView1 при первой загрузке показывает все группы в свернутом виде и товары если ни один товар не входит ни в одну группу (товары всегда в низу)
рядом с названием группы выводим стрелку которая смотрит (когда группа свернута) вправо, (когда группа развернута) влево. когда мы разворачиваем группы если в ней имеются подгруппы то показываем с ночало подгруппы а затем товары
так же должна быть возможность выбрав на форме группы нажав редактировать что бы открывалось именно редактирование
список групп будет храниться в отдельной таблице (пусть пока без подгрупп (группировок)) пусть группа будет одна и не будет иметь пока дочерних групп опять же думаю для тестов мне хватит пока двух таблиц
таблица category будет иметь id|value
таблица product будет иметь id|value
отсюда опять вытекает вопрос как это сделать?
подведем итог что мне нужно что бы я смог осилить эту программу
решить вопрос касаемо скорости работы программы при выводе инфы из БД (особенно справочников)
и научиться выводить в dataGridView1 группы , товары и сворачивать группы и разворачивать в общем выводить товары так что бы они входили в группы
Друзья. товарищи , коллеги я не прошу писать весь код за меня. я прошу привести мне мои ошибки, привести если не сложно какие то примеры (ссылки)
заранее спасибо!