Результаты поиска
|
|
CSharpA | Дата: Пятница, 02 Ноября 2018, 02:55 | Сообщение # 1 | Тема: Таблица на форме C# и выгрузка в нее данных из SQLite |
был не раз
Сейчас нет на сайте
| Всем привет! доброе утро, полдень, вечер!
я еще учусь писать приложения на 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 группы , товары и сворачивать группы и разворачивать в общем выводить товары так что бы они входили в группы
Друзья. товарищи , коллеги я не прошу писать весь код за меня. я прошу привести мне мои ошибки, привести если не сложно какие то примеры (ссылки)
заранее спасибо!
|
|
| |
CSharpA | Дата: Суббота, 27 Октября 2018, 21:07 | Сообщение # 2 | Тема: отправка запросов http получение и обработка результата |
был не раз
Сейчас нет на сайте
| что то не получается прочитать массив (
{{ "8": { "name": "Администратор" }, "10": { "name": "Вера" }, "11": { "name": "Антон" }, "14": { "name": "Антон_1" }, "12": { "name": "ЛюксПроект1" }, "9": { "name": "Наташа" }, "13": { "name": "Сан" }}}
пытаюсь читать так
Код HttpResponseMessage results34 = await client.GetAsync(Urls + "type=serverautorized&mode=getusers"); HttpContent contents34 = results34.Content; string contentss34 = await contents34.ReadAsStringAsync();
dynamic json = JObject.Parse(contentss34); int a = 0;//содержимое массива получил путем установки точки останова здесь на этой строке содержимое лежало в json foreach (var user in json) { listUsers.Items.Insert(a, user.Value.ToString());//здесь я пытаюсь присвоить списку имя юзера a = a + 1; }
в итоге в listUsers я получаю вот это
{"name": "Администратор"} {"name": "Вера"} {"name": "Антон"} {"name": "Антон_1"} {"name": "ЛюксПроект1"} {"name": "Наташа"} {"name": "Сан"}
что не так?
массив готовлю так в php
Код $filter = array(); $filter['limit'] = 2000; $listusers = array(); $users = $general->users->get_users($filter); if($users){ foreach ($users as $user) { $listusers[$user->id]['name'] = $user->name;
} } $json_str = json_encode($listusers); print $json_str;
|
|
| |
CSharpA | Дата: Суббота, 27 Октября 2018, 06:13 | Сообщение # 3 | Тема: отправка запросов http получение и обработка результата |
был не раз
Сейчас нет на сайте
| Доброе утро!, День, вечер :-)
продолжаю учиться )
теперь вопрос касаемо данных создал фору авторизации вроде все ок авторизация проходит НО мне нужно с формы авторизации передать значения элементов и переменных на другую форму
подскажите как правильно делать спасибо!Добавлено (27 Октября 2018, 06:26) --------------------------------------------- пробовал делать так! но не работает . ошибок нет! так как сделано верно НО ошибка на самом еле есть! так как форма1 еще не загружена а потому передаю я или нет что либо в переменную значения не имеет может мне нужно создать какие то глобильные переменные сохранять их в пределах работы программы но как это сделать? Добавлено (27 Октября 2018, 06:42) --------------------------------------------- хм... опять решил задачу (правда не знаю насколько верно) но думаю для самообучения этого хватит )
вот в общем задал глобальные статические переменные затем обращаюсь к ним и либо задаю им значения либо беру с них
Код static class Program { /// <summary> /// Главная точка входа для приложения. /// </summary> /// public static string MyGlobalVar1; public static string MyGlobalVar2;
теперь в форме 2 это форма авторизации присваиваю значение
Код Program.MyGlobalVar1 = LoginF.Text;
а в форме 1 забираю
Код textBox2.Text = Program.MyGlobalVar1; Добавлено (27 Октября 2018, 06:45) --------------------------------------------- еще интересный вопрос я привык работать в 1с 8 в ней есть отделбные модули для кода
(общие модули)
они предназначены для того что бы разгрузит ьскажем модуль формы или например для того если для разных форм или приложений нужно использовать одинаковые методы кода (функции)
например какие то пересчеты и т д
как в visual studio pr 2017 сделать отдельные глобальные модули как в 1с 8 что бы их можно было юзать из любого места программы? Добавлено (27 Октября 2018, 06:47) --------------------------------------------- или же если можно то помещать отдельные коды в отдельные файлы ато у меня программа уже достаточно большая а состоит всего после компиляции из одного файла (
|
|
| |
CSharpA | Дата: Пятница, 26 Октября 2018, 13:36 | Сообщение # 4 | Тема: отправка запросов http получение и обработка результата |
был не раз
Сейчас нет на сайте
| Если я верно понимаю на стороне PHP я так же строю массив
Код $arr = new stdClass; $arr ->name = "Вася пупкин"; $arr ->address = "Москва"; $arr ->status = 0;
но перед отправкой пакую его в json
Код $json_str = json_encode($arr);
после принтую как результат в ответ
а на стороне C# принимаю ответ таким способом
Код dynamic json = JObject.Parse(contentss1);
string name = json.name; // Наименование из моего массива string address = json.address;//Адрес string status = json.status;//статус
но вопрос теперь стоит в том что если я передам многомерный массив?
то-есть если будет так код php
Код $arr = new stdClass; $arr ->name = "Вася пупкин"; $arr ->address = "Москва"; $arr ->status = 0; $arr ->images = url;//это пример
то-етсь получается что в массиве arr есть еще один массив с изображениями юзера как мне прочитать его на C#? спасибо за ранее.Добавлено (26 Октября 2018, 14:45) --------------------------------------------- прошу прощения ) вот верный код
Код $arr = new stdClass; $arr ->name = "Вася пупкин"; $arr ->address = "Москва"; $arr ->status = 0; $arr ->images->url = url;//это пример Добавлено (26 Октября 2018, 15:56) ---------------------------------------------
Цитата cherepets ( ) Не json, а что? Если это просто строка с разделителем, то можешь попробовать разбивать через Split. Например, contentss1.Split(',')
вот код php который отдает ответ на запрос с сервера
Код $arr = new stdClass; $arr ->name = "Вася пупкин"; $arr ->address = "Москва"; $arr ->status = 0;
print $arr;
я не оборачивал все это добро в json_encode($arr); теперь буду обарачивать!Добавлено (26 Октября 2018, 16:35) --------------------------------------------- использую этот код но теперь ошибка
Имя "JObject" не существует в текущем контексте.
искал но не нашел в ссылках такой деррективы что делать?
использую Microsoft Visual Studio Profissional 2017
Код dynamic json = JObject.Parse(contentss1);
string name = json.name; // Наименование из моего массива string address = json.address;//Адрес string status = json.status;//статус Добавлено (26 Октября 2018, 17:04) --------------------------------------------- проблему решил сам
Код using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Microsoft.CSharp.RuntimeBinder;
прошу если не сложно ответьте по вопросам что выше о вложенных массивах спасибо заранее
|
|
| |
CSharpA | Дата: Пятница, 26 Октября 2018, 13:28 | Сообщение # 5 | Тема: отправка запросов http получение и обработка результата |
был не раз
Сейчас нет на сайте
| Цитата cherepets ( ) 1) Что такое contentss1? Покажи откуда он берется, как заполняется. 2) char arrs. Тип char - это один символ (одна буква). String это строка (много букв).
contentss1 это ответ сервера там массив построенные php (не json)Добавлено (26 Октября 2018, 13:29) --------------------------------------------- zhuravelsv
спасибо буду пробовать (что то не подумал о json)
|
|
| |
CSharpA | Дата: Четверг, 25 Октября 2018, 03:58 | Сообщение # 6 | Тема: отправка запросов http получение и обработка результата |
был не раз
Сейчас нет на сайте
| Привет! мне с ново нужна помощь!
как видно я передаю на php запросы произвожу на вебе какие то действия и возвращаю результат
так вот я собираюсь возвращать массив который имеет следующий вид
Код array (2) { [name] =>"zero_a" [login] => "two_a" }
в общем если честно то я не совсем правильно могу привести пример как выглядит данный массив я как то это в голове себе представляю и все(
могу привести пример как я создаю такой массив и как его читаю на php
вот так я создаю массив Код $arr = new stdClass; $arr ->name = "Вася пупкин"; $arr ->address = "Москва"; $arr ->status = 0;
вот так я его читаю
Код foreach ($arr $arr) { print 'имя '.$arr->name.' Адрес '.$arr->address.' Статус '.$arr->status ; }
но это на php
как прочесть данный массив на C#
я сделал так
Код foreach (char arrs in contentss1) { textBox1.Text = textBox1.Text + "\r\n " + arrs; textBox1.SelectionStart = textBox1.Text.Length; textBox1.ScrollToCaret(); }
но он мне выводит каждую букву отдельно (
а если делаю как в php выводит ошибки (
|
|
| |
CSharpA | Дата: Воскресенье, 14 Октября 2018, 08:37 | Сообщение # 7 | Тема: отправка запросов http получение и обработка результата |
был не раз
Сейчас нет на сайте
| Спасибо буду пробовать!
но у меня еще вопрос
как вывести текст на форму
на форме я создал элемент lebel1
почему то в одном участке кода я пишу lebel1.text = "Hi mir"; то все хорошо тест выводится а в другом участке кода ругается что нету типа такого элемента
я решил что надо обратиться к форме
написал так
Form1.Но тут я не вижу своего lebel1
начал пробовать все что есть после form1. пишу так Form1.FromChildHandle.label2.Text = "На Вашем счету: " + Convert.ToDecimal(contentss.Replace('.', ',')) + " BYN"; получаю ошибку Ошибка CS0119 'Control.FromChildHandle(IntPtr)" является метод, который недопустим в данном контексте. пишу так Form1.FromHandle.label2.Text = "На Вашем счету: " + Convert.ToDecimal(contentss.Replace('.', ',')) + " BYN"; получаю ошибку Ошибка CS0119 'Control.FromHandle(IntPtr)" является метод, который недопустим в данном контексте. ConnectServer опять же облазил весь интернет но примера подходящего мне не нашел (
помогитеДобавлено (14 Октября 2018, 09:47) --------------------------------------------- Получилось Спасибо! Добавлено (14 Октября 2018, 11:24) --------------------------------------------- теперь проблема другая все данные я передаю зашифрованными из API в MD5 как в коде C# расшифровать эти самые данные? или же никак?
|
|
| |
CSharpA | Дата: Четверг, 11 Октября 2018, 20:42 | Сообщение # 8 | Тема: отправка запросов http получение и обработка результата |
был не раз
Сейчас нет на сайте
| Вот этот код вроде работает но я опять же не понимаю как мне отправлять следующий запрос в какой строке этого кода и как?
с условиями я вроде бы уже разобрался но как сделать как я описал в первом посте о том что бы если по предпоследнему запросу вернулся ответ ожидайте программа начинала слать один и тот же запрос много раз целую минуту
Код using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Http; using System.Net;
namespace HTTP_Test { class program { static void Main() { Task t = new Task(HTTP_GET); t.Start(); Console.ReadLine(); }
static async void HTTP_GET() { var TARGETURL = "https://site.by/handlers/exchange/1c_exchange.php?type=sale&mode=checkauth";
HttpClientHandler handler = new HttpClientHandler() { Proxy = new WebProxy("http://127.0.0.1:8888"), UseProxy = false, };
Console.WriteLine("GET: + " + TARGETURL);
// ... Use HttpClient. HttpClient client = new HttpClient(handler);
var byteArray = Encoding.ASCII.GetBytes("admin:admin"); client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
HttpResponseMessage response = await client.GetAsync(TARGETURL); HttpContent content = response.Content;
// ... Check Status Code Console.WriteLine("Response StatusCode: " + (int)response.StatusCode); // ... Read the string. string result = await content.ReadAsStringAsync();
if(result=="ok") Console.WriteLine(result); else Console.WriteLine("No ok" + result); // ... Display the result. if (result != null && result.Length >= 50) { Console.WriteLine(result.Substring(0, 50) + "..."); } } } }
|
|
| |
CSharpA | Дата: Четверг, 11 Октября 2018, 18:41 | Сообщение # 9 | Тема: отправка запросов http получение и обработка результата |
был не раз
Сейчас нет на сайте
| Спасибо буду юзать HttpClient(); юзал HttpWebRequest так как еще совсе мне знаю C# нашел пару статей и делал как попало )
за код огромное спасибо
но сразу несколько вопросов у меня на сайте авторизацию производит через апатч в своем примере что бы авторизироватться я юзал .Credentials = new NetworkCredential("admin", "admin"); где понятно что логин и пароль равны admin
как мне проходить авторизацию теперь юзая HttpClient()?
и еще я еще очень плохо знаю синтаксис C# тоесть совсем его не знаю (Знаю PHP,JS, 1C) вот стало интересно учить C
в общем ближе к телу мне в любом случае я описал что я верну с сайта данные через запятую я не очень понимаю какие методы использовать что бы разобрать строку на переменные?Добавлено (11 Октября 2018, 20:02) --------------------------------------------- Что тодобавил Ваш код но никак е могу избавится от ошибки Ошибка CS0121 Неоднозначный вызов следующих методов или свойств: 'Task.Run(Action)" и "Task.Run(Func<Task>)"
|
|
| |
CSharpA | Дата: Четверг, 11 Октября 2018, 18:08 | Сообщение # 10 | Тема: отправка запросов http получение и обработка результата |
был не раз
Сейчас нет на сайте
| Всем привет! Учусь писать приложение на C# пока делаю все в на шаблоне консольного приложения.
так вот немного теории того что должно уметь мое приложение Приложение делает авторизацию на сервере
далее приложение делает еще один запрос такого типа type=togetthedetails&id=zfvf456d сервер при этом вернет ответ типа balans - 10
далее
Приложение отправляет на ресурс запрос типа type=replacesession&id=zfvf456d&win dowslogin=Саша сервер при этом вернет ответ типа status - expect
после чего приложение должно начать делать запросы каждую секунду в течении одной минуты запрос такой type=status&id=zfvf456d&windowslogi n=Саша сервер при этом может ответить expect и если он так ответил и минута еще не прошла приложение должно продолжать делать такие запросы пока не получит ответ типа Port - 15987, Login - Саша, Password - S1z8Q4tW1, ip - 152.54.42.198, type - remoteapp
все значения этих данных необходимо положить в отдельные переменные
так вот у меня проблема в следующем
подключиться к сайту и получить ответ у меня получилось но я никак не могу нафти информацию о том как условием проверить что в ответе, ка кразложить ответ на переменные, ка кзапустить цикл на одну минуту что бы делать запросы, и еще не могу понять как сночало подключится к сайту а затем отправлять запросы не один а несколько запросов
вот код моего приложения
Код:
Код using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO;
namespace ConsoleApp1 { class Program { static void Main(string[] args) {
HttpWebResponse result = null; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://мой сайт/handlers/exchange/1c_exchange.php?"); req.UserAgent = "Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0)"; req.Credentials = new NetworkCredential("admin", "admin"); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded";
byte[] SomeBytes = null; string FormParams = "type=sale&mode=checkauth"; SomeBytes = Encoding.UTF8.GetBytes(FormParams); req.ContentLength = SomeBytes.Length; Stream newStream = req.GetRequestStream();
newStream.Write(SomeBytes, 0, SomeBytes.Length); newStream.Close(); result = (HttpWebResponse)req.GetResponse();
// выводим результат в консоль StreamReader myStreamReader = new StreamReader(result.GetResponseStream(), Encoding.GetEncoding(1251)); string subString1 = myStreamReader.ReadToEnd();
Console.WriteLine(subString1);
Console.Read();
} } }
|
|
| |