c# 에서 구글맵,빙맵등을 간편하게 사용 할 수 있게 해주는 컴퍼넌트

http://greatmaps.codeplex.com/

 

GMap.NET is great and Powerful, Free, cross platform, open source .NET control. Enable use routing, geocoding, directions and maps from Coogle, Yahoo!, Bing, OpenStreetMap, ArcGIS, Pergo, SigPac, Yandex, Mapy.cz, Maps.lt, iKarte.lv, NearMap, OviMap, CloudMade, WikiMapia in Windows Forms & Presentation, supports caching and runs on windows mobile!

Preview:

  • gmap1512.png

The Greatest maps in the world:

NET Framework 4만 사용됨

 

동적으로 프로퍼티를 추가삭제할 일이생겼는데  ExpandoObject따위가 있음

 

dynamic

http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=KO-KR&k=k(DYNAMIC_CSHARPKEYWORD);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true

 

dynamic 형식을 사용하면 컴파일 타임 형식 검사를 무시하는 작업을 수행할 수 있습니다.대신, 이러한 작업은 런타임에 확인됩니다.dynamic 형식은 Office Automation API와 같은 COM API, IronPython 라이브러리와 같은 동적 API 및 HTML DOM(문서 개체 모델)에 대한 액세스를 간소화합니다.

형식 dynamic은 대부분의 환경에서 형식 object 같이 동작합니다.그러나 형식 dynamic의 식이 포함된 작업은 컴파일러에서 형식이 확인되지 않습니다.컴파일러는 작업에 대한 정보를 함께 패키지하고 해당 정보는 나중에 런타임에서 작업을 평가하는 데 사용됩니다.프로세스의 일부로 변수 형식 dynamic이 object 형식 변수에 컴파일됩니다.따라서 형식 dynamic은 런타임이 아닌 컴파일 타임에만 존재합니다.

 

ExpandoObject 클래스로 런타임에 그 클래스의 인스턴스 멤버들을 추가 및 삭제할 수 있으며, 이 멤버들의 값을 설정하고 가져올 수도 있습니다.이 클래스는 sampleObject.GetAttribute("sampleMember") 와 같이 더 복잡한 구문 대신 sampleObject.sampleMember와 같은 표준 구문을 사용할 수 있게 해주는 동적 바인딩을 지원합니다.

 

ExpandoObject 클래스

http://msdn.microsoft.com/ko-kr/library/dd487338.aspx

런타임에 동적으로 추가 및 제거할 수 있는 멤버가 있는 개체를 나타냅니다.

 

 

인스턴스 만들기

C# 에서 ExpandoObject 클래스의 인스턴스에 런타임에 바인딩을 사용하려면 반드시 dynamic 키워드를 사용해야 합니다.자세한 내용은 dynamic 형식 사용(C# 프로그래밍 가이드)을 참조하십시오.

 

아래에 보면 Name 과 Age라는 프로퍼티를 임의로 생성하고 있다. 오류안남 ㅋ

image

 

ExpandoObject 를 바인딩해보자!

image

 

실행된 화면

image

INotifyPropertyChanged 먹는다!!

// Add "using System.ComponentModel;" line 
// to the beginning of the file.
class Program
{
    static void Test()
    {
        dynamic employee = new ExpandoObject();
        ((INotifyPropertyChanged)employee).PropertyChanged +=
            new PropertyChangedEventHandler(HandlePropertyChanges);
        employee.Name = "John Smith";
    }

    private static void HandlePropertyChanges(
        object sender, PropertyChangedEventArgs e)
    {
        Console.WriteLine("{0} has changed.", e.PropertyName);
    }
}

 

 

추가로 프로퍼티도 임의로 넣기

        void Window1_Loaded(object sender, RoutedEventArgs e)
        {

            List<ExpandoObject> expand = new List<ExpandoObject>();

            for (int i = 0; i < 10; i++)
            {
                dynamic sampleObject = new ExpandoObject();
                var p = sampleObject as IDictionary<String, object>;
                p["Name"] = "kojaedoo";
                p["Age"] = i;
                if (i == 9)
                {
                    p["CreateDate"] = "kojaedoo";
                }
                expand.Add(sampleObject);
                
            }

            this.dataGrid1.ItemsSource = expand;
        }


        private void button1_Click(object sender, RoutedEventArgs e)
        {
            var result = this.dataGrid1.SelectedItem as IDictionary<String, object>;
            if (result != null)
            {
               string s = result["Name"].ToString(); //kojaedoo           

            }
        }

한페이지에 하나씩보여주기

리포트 한페이지에 하나씩 보여주고 싶을때 처리하는 방법이다.

아래는 간단한 예제이다

image

image

image

 

사용방법

image

목록을 끌어와서 리포트 한장 에 가득채운다.

그럼 리포트 한장에 목록하나가 되는것이다

image

그런 다음 아래와 같이 그룹속성을 선택 한다.

image

 

그룹속성에서 페이지 나누기 하면 끗~

image

이제 리포트 하나당 한명씩 (하나의컨텐츠) 볼 수 있다.

image

XP 에서 닷넷프레임워크4.0을 아예 설치를 못하는경우가 발생하는 경우가 있습니다.

아래의 경로의 파일을 설치 하면됩니다.

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=32

대상PC

-WINDOWS XP  서비스팩이 2 이하인 PC

-불법복제로 윈도우즈 업데이트가 막혀져있는 PC

(불법복제 윈도우즈는 인증을 막기위해 HOST가 변경되어져 있거나 MS 사의 업데이트서버로의  접속이 막혀있습니다)

 

해결방법

Windows Imaging Component (wic_x86_enu.exe) 설치

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=32

 

ps

xp 에서 닷넷프레임워크 3.5로 작업시  ico 파일이 문제를 일으키는 경우가 있었는데 왠지 이거 설치하면 될꺼 같은데???

테스트하긴 귀찮음 ㅎ

정규식

string input = @"특수문자 !@#$%^& 제거 합시다~~...!!!";
input = Regex.Replace(input, @"[^a-zA-Z0-9가-힣]", "", RegexOptions.Singleline);
Debug.WriteLine(input);

 

 

결과값

특수문자제거합시다

ClickOnce 배포 시 서버 및 클라이언트 구성 문제


IIS가 아닌 다른 웹 서버에서 ClickOnce 응용 프로그램을 배포하는 경우 서버가 배포 매니페스트 및 응용 프로그램 매니페스트와 같은 주요 ClickOnce 파일에 대해 잘못된 콘텐츠 형식을 반환하면 문제가 발생할 수 있습니다.이 문제를 해결하려면 웹 서버의 도움말 설명서에 있는 서버에 새 콘텐츠 형식을 추가하는 방법을 참조하여 다음 표에 나열된 모든 파일 이름 확장명 매핑이 해당 위치에 있는지 확인합니다.

 

.application

application/x-ms-application

.manifest

application/x-ms-manifest

.deploy

application/octet-stream

.msu

application/octet-stream

.msp

application/octet-stream

출처 : http://support.microsoft.com/kb/304283

Windows 7은 찍어보니깐 6 나온다 .

 

  //Platform is Windows NT 3.51, Windows NT 4.0, Windows 2000, or Windows XP.
    case System.PlatformID.Win32NT:

    switch(osInfo.Version.Major)
        {
            case 3:
                Console.WriteLine("Windows NT 3.51");
                break;
            case 4:
                Console.WriteLine("Windows NT 4.0");
                break;
            case 5:
                if (osInfo.Version.Minor==0) 
                    Console.WriteLine("Windows 2000");
                else
                    Console.WriteLine("Windows XP");
                    break;
         }break;

image

사용자권한은 보통 하나 이상이다. 그래서 enum을 이용해서 간단하게 사용한다.

ClientLevels.cs (권한설정 enum)

image

Client.cs (사용자)

image

간단하게 권한 설정 하는법

MainWindow.xaml.cs

 

    public partial class MainWindow : RibbonWindow
    {
        public MainWindow()
        {
            InitializeComponent();


            this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
        }

        void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
             
            Client client = new Client();//임의의  사람
            //블랙리스트와 게시트 권한추가
            client._ClientStates = (ClientLevels.ClientStates.IsBlackListed|ClientLevels.ClientStates.IsGuest); 
            client._EmpCode = "0001";
                       
            //관리자인지 검사
            bool Isguest = (client._ClientStates & ClientLevels.ClientStates.IsAdmin) == ClientLevels.ClientStates.IsAdmin;

            Debug.WriteLine("관리자냐? "+Isguest.ToString()); //False

            //IsBlackListed와IsGuest을 유지 상태에서  (IsAdmin)관리자권한추가
            client._ClientStates =client._ClientStates | ClientLevels.ClientStates.IsAdmin;


            Isguest = (client._ClientStates & ClientLevels.ClientStates.IsAdmin) == ClientLevels.ClientStates.IsAdmin;
            Debug.WriteLine("관리자냐? " + Isguest.ToString());

        }          
    }

 

 

enum 참고사항

http://msdn.microsoft.com/en-us/library/cc138362.aspx

http://msdn.microsoft.com/ko-kr/library/dk06fkbc.aspx

Stopwatch stopWatch = new Stopwatch();

stopWatch.Start();


//프로그램 로직

stopWatch.Stop();

TimeSpan ts = stopWatch.Elapsed;
// Format and display the TimeSpan value.
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
    ts.Hours, ts.Minutes, ts.Seconds,
    ts.Milliseconds / 10);
Debug.WriteLine(elapsedTime, "RunTime");

 

Stopwatch stopWatch = new Stopwatch(); stopWatch.Start();  할 필요 없이

tStopwatch  imePerParse = Stopwatch.StartNew();  //이렇게 하면 바로 시작된다.

 

[ MSDN ] Stopwatch

http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=KO-KR&k=k(%22SYSTEM.DIAGNOSTICS.STOPWATCH.%23CTOR%22);k(SOLUTIONITEMSPROJECT);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true

WinForm

Application.StartupPath

WPF

AppDomain.CurrentDomain.BaseDirectory

image

+ Recent posts