TOP комментариев

+2
Хочу сделать прогу которая периодически проверяет наличие файла на ФТП сервере и его скачивает. Использую
client.GetFile(MainParams.FtpTimeout * 1000, MainParams.Path + MainParams.GetFile, MainParams.GetFile);

Файл скачивается. проблем нет. Проблема в том что если запустить эту часть кода когда файл отсутствует на ФТП. В локальной папке на компе просто появляется файл. Пустое файл. Как обойти не знаю.
avatar

xazrad

  • 26 июня 2011, 20:03
+1
Глупый вопрос — а как стандартными методами получить серийник на Symbol?
avatar

kel

  • 21 мая 2012, 16:50
+1
В среду напишу подробно с примерами варианты как это сделать, сейчас сильно занят. Там в зависимости от выбранной стратегии либо будет быстрее работать, либо код значительно проще. Я правильно понимаю — файл со справочником в вашем случае лежать будет на ТСД?..
Потому что если на сервере — то лучше работать с какой либо из баз данных.
avatar

Roman

  • 30 апреля 2012, 14:07
+1
Возможно дело просто в том что pictureBox — пустой, перед Dispose — надо в него что нибудь (изображение) положить.
avatar

Roman

  • 22 марта 2012, 21:13
+1
Вот например — делал маленькую графическую менюшку, для мобильного устройства из четырёх пунктов.
Процедурка прорисовывает выбранный элемент активным и предыдущий выбранный неактивным.

— В ImageList1 — изображения неактивных менюшек.
— В ImageList2 — изображения активных менюшек.

— num_prev_menu — индекс предыдущего выбранного пункта (для отмены выделения).
— num_menu — индекс текущего выбранного пункта меню (для выделения).

private void repaint_menu()
        {
            switch (num_prev_menu)
            {
                case 1:
                    pictureBox1.Image.Dispose();
                    pictureBox1.Image = imageList1.Images[0];
                    break;
                case 2:
                    pictureBox2.Image.Dispose();
                    pictureBox2.Image = imageList1.Images[1];
                    break;
                case 3:
                    pictureBox3.Image.Dispose();
                    pictureBox3.Image = imageList1.Images[2];
                    break;
                case 4:
                    pictureBox4.Image.Dispose();
                    pictureBox4.Image = imageList1.Images[3];
                    break;
            }

            switch (num_menu)
            {
                case 1:
                    pictureBox1.Image.Dispose();
                    pictureBox1.Image = imageList2.Images[0];
                    break;
                case 2:
                    pictureBox2.Image.Dispose();
                    pictureBox2.Image = imageList2.Images[1];
                    break;
                case 3:
                    pictureBox3.Image.Dispose();
                    pictureBox3.Image = imageList2.Images[2];
                    break;
                case 4:
                    pictureBox4.Image.Dispose();
                    pictureBox4.Image = imageList2.Images[3];
                    break;
            }

        }


— Если убрать Dispose — и зажать кнопку перебора менюшек — спустя непродолжительное время получим memory error.
avatar

Roman

  • 19 марта 2012, 00:25
+1
а как быть с кодировкой? русские буквы после упаковки становятся вопросиками или непонятными символами.
avatar

Anna

  • 27 февраля 2012, 19:20
+1
Хотел бы предложить так же и свою статью про сортировку списков: C#: Сортировка списка (List), примеры и сравнение производительности
avatar

JeanLouis

  • 31 января 2012, 03:41
+1
Перед этой строкой нужно создать новую форму: Form2 f2 = new Form2();//в форме-источнике, а после нее уже CallBackMy.callbackEventHandler(«Передаваемые данные.»);

p.s.: Спасибо за статью =)
avatar

Mozart

  • 26 октября 2011, 19:32
+1
Есть более простой способ — подключить событие DataTransfered и обрабатывать его.


Dim ftpclient As New BytesRoad.Net.Ftp.FtpClient
ftpclient.PassiveMode = True
AddHandler ftpclient.DataTransfered, AddressOf data_transfered
//Выполняем всё необходимое
//Я скачивал все файлы из директории (Progressbar1 - обновлялся по количеству файлов, а ProgressBar2 - отображал процесс текущего файла
Dim dirlist() As BytesRoad.Net.Ftp.FtpItem = ftpclient.GetDirectoryList(FTP_TIMEOUT)
ProgressBar1.Maximum = dirlist.lenght
Dim cnt As Integer = 0
For Each itm As BytesRoad.Net.Ftp.FtpItem In dirlist
      Select Case itm.ItemType
         Case BytesRoad.Net.Ftp.FtpItemType.File
            ProgressBar2.Value = 0
            ProgressBar2.Maximum = itm.Size
            ftpclient.GetFile(FTP_TIMEOUT, "d:\_ftp\" + itm.Name, itm.Name)
            ProgressBar1.Value = cnt + 1
            ProgressBar1.Update()
            Application.DoEvents()
            cnt += 1
      End Select
 Next
//Обработчик события.
    Private Sub data_transfered(ByVal sender As Object, ByVal e As BytesRoad.Net.Ftp.DataTransferedEventArgs)
        
        ProgressBar2.Value += e.LastTransfered
     
        Application.DoEvents()

    End Sub

Я думаю, адаптировать код к C# не составит трудов.
avatar

3ekc

  • 6 октября 2011, 20:22
+1
Ну если просто надо один найденный файл любой, то берем допустим последний, для этого меняем строчку в функции поиска с:
result = result + file.FullName + "\n";
На:
result = file.FullName;


Затем присваиваем строке, так:
string file = search_file("путь с которого ищем", "файл который ищем").Replace("\\","\\\\");


P.S. А вообще, из твоего описания, совершенно не понятно что конкретно не работает. «Для того чтобы получить правильный ответ, необходимо сначала задать правильный вопрос.»
avatar

Roman

  • 12 августа 2011, 09:58
+1
Когда говорят похожи синтаксисом, я так понимаю имеют ввиду похожесть синтаксиса основных основных операторов: for, while, if… else. и т.п.
Было бы странно если бы на PHP работу с FTP было бы сложнее реализовать, это очень близко к основной области его применения.
avatar

Roman

  • 28 июля 2011, 21:57
+1
В данном примере. если выбирать изображение не в каталоге Release, будет возникать ошибка открытия файла отчета.
Возникает это потому, что openFileDialog1 изменяет основной каталог программы на тот откуда открывается выбранный в нём файл.
Лечится так:
Перед строчкой
if (openFileDialog1.ShowDialog() == DialogResult.OK)
Нужно вставить
openFileDialog1.RestoreDirectory = true;
, что вернёт настройки основного каталога в исходное состояние, до использования openFileDialog1.
avatar

Madster

  • 27 июля 2011, 16:59
+1
Кнопка взять картинку — просто позволяет выбрать изображение, которое добавляется в источник данных а сам источник данных сохраняется в dataset.xml

Кнопка показать отчёт — просто берёт источник данных из xml-ки и выводит сам отчёт.

Создавать xml — файл не обязательно можно просто создавать источник данных (DataSet), подключать его напрямую к отчёту и выводить.

В xml-ку я кидаю для наглядности и для удобства настройки отчётной формы. Там в проекте есть папка ReportFile — вот в ней проект с отчётом в нём мы просто настраиваем форму отчёта, всё что из него потом забираем это сам *.rpt файл.

Проще говоря, можно туда сюда myDS не сохранять и не загружать — а просто напрямую использовать в отчёте, после создания.

Вместо вот этого в коде первой кнопки:
//Записываем источник данных в XML
myDS.WriteXml(@".\dataset.xml",XmlWriteMode.WriteSchema);


Написать вот это:
ReportDocument myReport = new ReportDocument();
//Загружаем форму отчёта
myReport.Load(@".\CrystalReport1.rpt");

//Указываем отчёту откуда брать данные.
myReport.SetDataSource(myDS);
//Создаём форму на которой лежит crystalReportViewer!
Form2 frm = new Form2();
//Указываем отчёт для CrystalReportViewer
frm.crystalReportViewer1.ReportSource = myReport;
//Открываем форму.
frm.Show();
avatar

Roman

  • 27 июля 2011, 13:41
+1
Добрый день! Пробую вставить в отчёт изображение.
Необходимо печатать одно изображение на одном листе, но имя берётся из БД. Как такое провернуть и возможно ли?
Делаю так:
1. Правой кнопкой по отчету, в редакторе выбираю — Insert -> Ole Object…
2. Ставлю галочку связь.
3. Перед выводом отчета подменяю файл test.bmp любым другим файлом, например Photo.bmp. Но при выводе отчета всё равно отображается test.bmp.

Необходимо, например:
Имя файла test.bmp (берётся из mbd файла — каким образом?), вставляем его в отчёт, потом подменяем этот файл любым другим, но путь динамически изменяется (в зависимости от того. где находится запускной файл).

Что не верно?
avatar

Madster

  • 26 июля 2011, 18:09
+1
Спасибо.

можно также задавать шаблон столбца (а не отдельных ячеек), например:
DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
avatar

djnik

  • 18 июня 2011, 14:43
+1
при добавлении столбца в dataGridView выпадает следующая ошибка:
Column cannot be added because its CellType property is null.

Код:
DataGridViewColumn col1 = new DataGridViewColumn();
col1.HeaderText = «Наименование»;
col1.Width = 300;

dataGridView1.Columns.Add(col1);
avatar

djnik

  • 18 июня 2011, 04:50
+1
Отчёту передаётся источник данных MyDS — данные в нём уже есть из базы. А по структуре он идентичен xml — файлу, мы ведь xml — файл из него делали (делали только для того чтобы форму отчёта сделать в которой структура данных будет совпадать).

На клиенте нужны:
.NET — Не ниже той под которую писали.
И библиотеки Crystal Report-а — CRRedist2008_x86.msi или CRRedist2008_x64.msi в зависимости от разрядности платформы.

Библиотеки поиском можно найти в каталоге с VisualStudio.
avatar

Roman

  • 16 июня 2011, 19:00
+1
Проверил у себя, работает.

Создаём переменную в отчёте, вот так:
Создание параметра в CrystalReport

Затем, задаём параметр в коде:
myReport.SetParameterValue("param1", "Go Go Go!");

Я это сделал в самом конце, уже после того как источник данных подключил к отчёту.

И вот, что получилось:
Создание параметра в CrystalReport
avatar

Roman

  • 16 июня 2011, 13:04
+1
Я бы для начала проверил сколько там в datasete в выборке, действительно ли 1 запись:
myDS.Tables[0].Rows.Count

Если всё ОК, то копать в сторону отчёта. При создании RPT файла, он же чем-то заполняется, так вот то чем он заполняется по структуре должно быть таким же как то что передаём в момент выполнения.

Самый лучший способ правильно сделать RPT — файл это подключить к нему xml — файл источника данных, а сам xml — файл из источника данных получить очень просто:
myDS.WriteXml("ваш_файл.xml", XmlWriteMode.WriteSchema);
avatar

Roman

  • 15 июня 2011, 23:33
+1
Лучше Release — всю папку с содержимым копируешь на терминал и из папки запускаешь экзешник. (Рядом с экзешником должны быть dll-ки две)

Ещё один вопрос, а без программы — сканер светится если на кнопку считывателя жать, до запуска программы?
Может просто сканер занят — подключиться не может? (Хотя тогда бы скорее всего ошибку выдал)

И ещё Пикает сканер? Если не пикает то ШК — сам возможно не читается.
Попробуй другой — какой нибудь продуктовый обычный (с ёгурта например).

Если с выключенной программой сканер не активен, а при включенной программе не читает никакие ШК, то я бы посмотрел настройки сканера, ато может просто чтение определённых типов ШК отключено.
avatar

Roman

  • 23 мая 2011, 21:26