Показаны сообщения с ярлыком c#. Показать все сообщения
Показаны сообщения с ярлыком c#. Показать все сообщения

четверг, 25 февраля 2010 г.

Сохранение/Загрузка ObservableCollection

Вопрос: How to save, load ObservableCollection?

В принципе задачка Serialize/Deserialize объектов достаточно простая, но вдруг кто не знает.

Создаем класс People

public class People
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BornDate { get; set; }
public string Email { get; set; }
}

Добавляем пространства имен, для удобства.

using System.Collections.ObjectModel;
using System.IO;
using System.Xml.Serialization;

А вот и наша коллекция:

private ObservableCollection<People> _Peoples;


Название файла для сохранения/загрузки лучше оформить отдельной переменной:

private string _FileName = "peoples.data";


Ну а теперь собственно и сами методы.

Загрузка данных:

private void LoadData()
{
if (File.Exists(_FileName))
{
using (var reader = new StreamReader(_FileName))
{
var xs = new XmlSerializer(typeof(ObservableCollection<People>));
_Peoples = (ObservableCollection<People>)xs.Deserialize(reader);
}
}
else
{
_Peoples = new ObservableCollection<People>();
}           
}

Сохранение данных:

private void SaveData()
{
using (var writer = new StreamWriter(_FileName))
{
var xs = new XmlSerializer(typeof(ObservableCollection<People>));
xs.Serialize(writer, _Peoples);
}        
}

Для отображения списка можно воспользоваться ListBoxwpf


Для этого в xaml файл добавляем:

<ListBox x:Name="list" Width="Auto">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}" Width="50"  />
<TextBlock Text="{Binding LastName}" Width="50"/>
<TextBlock Text="{Binding BornDate, StringFormat=d}" Width="60" />
<TextBlock Text="{Binding Email}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>



Исходники проекта

вторник, 9 февраля 2010 г.

Linq: Как получить из одного списка объектов пронумерованный?

Возникла задача получить из списка объектов (IList<People>) другой, а именно пронумерованный (IDictionary<int,People>). Те получить некоторый аналог ROWNUM (Oracle) или ROWNUMBER (MS SQL Server).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Linq.test
{
class Program
{
static void Main(string[] args)
{
// источник записей
var mans = new[] {
new People { Name = "John", Age = 23 },
new People { Name = "Bob", Age = 12 },
new People { Name = "Bill", Age = 43 },
new People { Name = "Patrick", Age = 69 }
};

// посмотрим что там в списке ;-)
foreach (var man in mans)
{ Console.WriteLine(man.ToString()); }

// получаем проиндексированный список
var counteredMan = GetIndexed(mans);

// собственно выводим его в консоль
foreach (var item in counteredMan)
{ Console.WriteLine(item.Key + " - " + item.Value); }

Console.ReadLine();
}

/// <summary>
///
Получение пронумерованного списка
/// </summary>
/// <param name="pupils"></param>
/// <returns></returns>
private static IDictionary<int, People> GetIndexed(IEnumerable<People> pupils)
{
return pupils.Select((man, i) => new
{
id = i+1,
man = man
}).ToDictionary(key => key.id, val => val.man);
}
}

/// <summary>
///
Объект для опытов
/// </summary>
public class People
{
public string Name { get; set; }
public int Age { get; set; }

public override string ToString()
{ return "Гражданин " + Name + ", возраст: " + Age; }
}
}

четверг, 10 сентября 2009 г.

ASP.NET MVC: jQuery Grid Plugin

Набросал небольшую статью.
Показал как прикрутить и отобразить данные с помощью плагина jqGrid, в дальнейшем планирую рассмотреть сценарии CRUD и различные типы входящих данных.

понедельник, 8 июня 2009 г.

.NET: Отладка приложений / сервисов

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


C#:
if (!Debugger.IsAttached) Debugger.Break();
* This source code was highlighted with Source Code Highlighter.

VB.NET:
If Not Debugger.IsAttached Then
  Debugger.Break()
End If

* This source code was highlighted with Source Code Highlighter.

понедельник, 1 июня 2009 г.

DateTime.ToString и "/" подстава

задолбался
      DateTime dt = DateTime.Now;
      Trace.WriteLine("ToString() - " + dt.ToString());
      Trace.WriteLine("dd/MM/yyyy HH:mm - " + dt.ToString("dd/MM/yyyy HH:mm"));
      Trace.WriteLine("dd[MM[yyyy HH^mm - " + dt.ToString("dd[MM[yyyy HH^mm"));
      Trace.WriteLine(@"dd\/MM\/yyyy HH:mm - " + dt.ToString(@"dd\/MM\/yyyy HH:mm"));
      Trace.WriteLine("System.Globalization.DateTimeFormatInfo.CurrentInfo.DateSeparator - " +
        System.Globalization.DateTimeFormatInfo.CurrentInfo.DateSeparator);


* This source code was highlighted with Source Code Highlighter.


Output:
ToString() - 01.06.2009 15:44:54
dd/MM/yyyy HH:mm - 01.06.2009 15:44
dd[MM[yyyy HH^mm - 01[06[2009 15^44
dd\/MM\/yyyy HH:mm - 01/06/2009 15:44
System.Globalization.DateTimeFormatInfo.CurrentInfo.DateSeparator - .

Спрашивается чем слеш(/) неугодил?

среда, 22 октября 2008 г.

How to export EventLog in .evt format

Как сделать экспорт журналов событий в evt формат из C# 2.0?
Занадобилось мне сделать утиль, чтоб у пользователей логи забирать и не тратить свое время на объяснение чего и откуда экспортировать.
Сделал только для System и Application журналов, добавить остальные не проблема, знаючи...
Собственно:
using System;
using System.IO;
using System.Runtime.InteropServices;

namespace LogHarvester
{
  class Program
  {
    [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    static extern bool BackupEventLog(IntPtr hEventLog, string backupFile);

    // OpenEventLog PInvoke overloaded call supporting full parameters.
    [DllImport("advapi32.dll", SetLastError = true, EntryPoint = "OpenEventLog")]
    public static extern IntPtr OpenEventLog(
             [MarshalAs(UnmanagedType.LPStr)] String lpUNCServerName,
             [MarshalAs(UnmanagedType.LPStr)] String lpSourceName);

    static void Main()
    {
      BackupEventLog(OpenEventLog(null, "Application"), Path.Combine(Environment.CurrentDirectory, "application.evt"));
      BackupEventLog(OpenEventLog(null, "System"), Path.Combine(Environment.CurrentDirectory, "system.evt"));
    }
  }
}

* This source code was highlighted with Source Code Highlighter.