Bootstrap DateTimePicker - пример выбора только месяца из выпадающего меню.

В данном примере будет продемонстрировано, как сделать выпадающее меню выбора только месяца, без числа, с использованием bootstrap-datetimepicker.

Итак, для реализации задуманного нам понадобятся компоненты:
bootstrap — сам bootstrap
jquery — Библиотека JQuery
moment — Библиотека для работы со временем, в нашем примере будет использована moment-with-locales
bootstrap-datetimepicker — Библиотека выпадающего меню выбора даты

В дополнение, в примере будут использованы библиотеки respond.js и html5shiv.min.js для того, чтобы наша затея корректно отображалась и в IE.

Подробнее

OpenXML - Пример создания Excel файла на C#

В данной публикации приведен пример генерации Excel файла при помощи библиотеки OpenXML.
Отличие этой библиотеки OpenXML от Microsoft.Office.Interop.Excel в быстродействии которое на порядок выше.

Для работы с Excel документами необходимо установить расширение DocumentFormat.OpenXML из Nuget, оно позволит создавать Excel документы для версии Microsoft Office не ниже 2010.

Так-же для работы нам понадобится добавить в проект стандартную библиотеку WindowsBase, просто через Add References, без нее приложение не скомпилируется.

Ниже я приведу пример того, с чем работал сам, первоначальный вариант примера был найден где-то на просторах англоязычного интернета, переработан и теперь выглядит так — как выглядит, с моими комментариями и правками.

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



Исходный код примера консольного приложения формирующего Excel на изображении выше:

Подробнее

Создаем первый Web сайт с ноля на .NET Core C#

1. Устанавливаем .NET Core.

2. Создаем новый проект .NET Core

mkdir Sample01
cd Sample01
dotnet new


После выполнения этих команд в папке Sample01 появится 2 файла: «Program.cs», «project.json».
Это и есть простейший шаблон приложения на .NET Core.

Подробнее

Используем Crystal Report в C#

В этой статье я приведу пример создания и использования отчёта Crystal Reports в Visual Studio.

Приведённый пример — это реально рабочий проект по подготовке к печати билетов на обычном лазерном принтере.

Начнём с того что нам потребуется источник данных поэтому вначале создадим проект в котором будем использовать наш отчёт и создадим источник данных который выгрузим в XML файл, для более простого и наглядного создания нового отчёта и его настройки.

Подробнее

Программное добавление событий для элементов управления в C#

Часто бывают случаи, когда создать событие для элементов управления необходимо программно, например когда нам надо выполнить определённые манипуляции с элементами и данными которые они содержат до того как начнут обрабатываться события на изменение выбранного значения, на клик мышкой, на изменение содержимого и многие другие.
Для этого целесообразно создавать события не в дизайнере формы а программно. Как это сделать я здесь и покажу на примере.

Пример будет получать источник данных в ComboBox, и по событию SelectedIndexChanged — будет выводить индекс выбранного элемента, вот это событие мы и создадим программно.

Итак приступаем:

DataSet ds = new DataSet(); //Создаем источник данных.
EventHandler handler; //Создаем делегат.
Подробнее

Простой пример обработки XML файла C#.

Пример обработки XML файла, средствами языка C#.

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

string prm = "";

            XmlTextReader reader = new XmlTextReader(fi.Name.Replace(fi.Extension, ".XML"));

            while (reader.Read())
            {
                switch (reader.NodeType)
                {
                    case XmlNodeType.Element: // Узел является элементом.
                        prm = prm + ("<" + reader.Name);

                        while (reader.MoveToNextAttribute()) // Чтение атрибутов.
                            prm = prm + (" " + reader.Name + "='" + reader.Value + "'");
                        prm = prm + (">");
                        break;
                    case XmlNodeType.Text: // Вывести текст в каждом элементе.
                        prm = prm + (reader.Value);
                        break;
                    case XmlNodeType.EndElement: // Вывести конец элемента.
                        prm = prm + ("</" + reader.Name);
                        prm = prm + (">");
                        break;
                }
            }
            MessageBox.Show(prm);
            reader.Close();
Подробнее

Как правильно открывать картинки в C#

Из архива - вдруг пригодится...
Вроде бы нет ничего проще открытия картинки с диска в C#. А нет, И тут есть свои грабли!

Здесь просто приведу два примера.

Первый способ (неправильный):

if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
     Image img = Image.FromFile(openFileDialog1.FileName);
     pictureBox1.Image = img;
}
Подробнее

Создаём свою службу на C#

Здесь я не буду приводить подробных инструкций, какую кнопочку необходимо нажать и какую менюшку ткнуть в Visual Studio. Здесь я остановлюсь на основных двух проблемных моментах с которыми сам столкнулся при создании собственной службы.

Первый момент. Собственно служба должна что нибудь делать, это что нибудь обычно делается по таймеру, вот он то никак и не запускался. Не работал, и всё тут! Выяснилось что обычный таймер System.Windows.Forms.Timer работает только на основе оконных сообщений! Находил информацию по поводу того что можно и без этого запустить как: System.Timers.Timer или System.Threading.Timer — но с ними тоже ничего не получилось. Вернулся к первому варианту, просто в отдельном потоке создал форму и таймер, ниже пример.

public partial class Service1 : ServiceBase
    {
        System.Windows.Forms.Timer timer1;
        System.Windows.Forms.Form form1;
        System.Threading.Thread thread1;

        public Service1()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            //При запуске службы запускаем новый поток 
            thread1 = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc));
            thread1.Start();
            thread1.IsBackground = true;

        }


        void ThreadProc()
        {
            //Создаем во вновь созданном потоке форму и таймер 
            form1 = new System.Windows.Forms.Form();
            timer1 = new System.Windows.Forms.Timer();
            timer1.Tick += new EventHandler(timer_Tick);
            timer1.Interval = 2000;
            timer1.Start();
            form1.Show();
            //Запускаем всё это добро. 
            System.Windows.Forms.Application.Run(form1);
        }


        protected override void OnStop()
        {

            thread1.Abort();

        }

        private void timer_Tick(object sender, EventArgs e)
        {
            timer1.Enabled = false;
            timer1.Stop();
            runProcedure(); //Запускаем процедуру (чего хотим выполнить по таймеру).
            timer1.Enabled = true;
            timer1.Start();

        }
    }        


Собственно вот так вот таймер и запустил в службе, ничего сложного, тяп ляп и всё заработало.
Но не тут то было!

Второй момент!
Как это всё теперь установить? Так чтобы это всё было в службах и запускалось само и работало.
Для того чтобы установить написанную на C# службу потребуется утилита «InstallUtil.exe» — находится она в папке с .NET 2 — у меня нашлось конкретно вот в этой папочке: C:\Windows\Microsoft.NET\Framework\v2.0.50727. У меня там было ещё куча версий, но нужный файлик был именно там.

Чтобы не прописывать пути скопировал из этой папки файлики InstallUtil.exe и InstallUtilLib.dll в папку с скомпилированным проектом службы, и запускал инсталл вот такой строчкой:

InstallUtil.exe /i MyService.exe


Но это не сработает если предварительно в проект не добавить Класс Инсталлера, делается это так: кликаете правой кнопкой мыши по Пустому месту в Дизайнере службы (в моём случае вкладка Service1.cs[Design]) и кликаете по менюшке «Add Installer». Собственно всё. После этого действия появится вкладка «Project Installer» — там в свойствах ServiceInstaller задаём название и описание нашей службы, а в свойствах ServiceProcessInstaller — от чьего имени будет выполняться служба. Если поставите в свойстве Account > User — то при установке служба спросит имя пользователя и пароль от которого будет запускаться.

Вот собственно и всё.

Подробнее