728x90
300x250
[C#.NET] 소스 코드 요약하기 - #region

#region 이름

#endregion 

#region ~ #endregion 명령어에 감사하다는 생각을 자주 한다.
-> 이거 사용하면 의외로 편함.

반응형
728x90
300x250

[C#.NET + ADO.NET] Crystal Report 13 데이터 집합과 동적 제어

Crystal Report 13을 동적 데이터베이스를 통해 제어하는 방법을 소개하도록 하겠습니다.
마법사를 이용하여 데이터베이스를 선택할 때 다른 PC에 배포하게 되면 위치를 찾을 수 없어서 실행하지 못하는 경우가 생깁니다. 이와 같은 불상사를 예방하기 위해 데이터 집합을 이용하여 Crystal Report 13을 동적으로 제어하는 방법에 관하여 언급하겠습니다.


1. 데이터베이스 파일 및 소스 코드
CrystalReportsApplication1.zip


2. 데이터베이스 준비하기



Access 2003 파일로 위의 그림과 같이 디자인하시고 저장하시기 바랍니다.


3. 새 프로젝트 만들기



CrystalReportApplication을 클릭하고 만듭니다.
빈 보고서 만들기를 클릭합니다.

2. 데이터 집합 만들기
솔루션에서 새 항목을 클릭 후 데이터 집합을 만듭니다.

 

예제에서는 기본 이름 Dataset1.xsd를 사용하겠습니다.


Dataset1.xsd를 더블 클릭하신 후에 오른쪽 버튼을 클릭하고 추가에서 DataTable(D)을 클릭합니다.

Table이름을 sampledb로 하시고 Access에서 만든 열 항목의 이름을 그대로 입력합니다.
(참고 열 항목 이름을 다르게 할 수도 있습니다. Columns AS 신규이름)


3. Crystal Report Design



CrystalReport File을 클릭합니다. 필드 탐색기를 클릭 후에 데이터베이스 필드 항목에서 오른쪽 버튼을 하신 후에 데이터베이스 전문가를 클릭합니다.


프로젝트 데이터를 클릭하시고 ADO.NET 데이터 집합을 클릭하고 sampledb를 선택합니다.
화살표 키를 눌러서 선택한 테이블로 넘기신 후 확인을 클릭합니다.



Sampledb가 올라온 것을 확인하실 수 있습니다.
필드 항목을 적절히 배치하시고 저장합니다.

3-1. 데이터베이스 파일 프로젝트에 추가
솔루션을 클릭 후 오른쪽 버튼을 클릭합니다. 추가에서 기존 항목을 클릭합니다.


데이터 파일로 확장명을 변경 후 아까 전에 만든 파일을 선택합니다.



취소를 클릭합니다.

3-2. app.config 파일 만들기
솔루션을 클릭 후 오른쪽 버튼을 클릭합니다. 추가에서 새 항목을 클릭합니다.



app.config이란 이름으로 파일을 생성합니다.

app.config에 코딩합니다.
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
 
<supportRuntime version="v4.0" />
</startup>
</configuration>

3-3. Form1.cs 코딩

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Windows.Forms;
namespace CrystalReportsApplication1
{
    public partial class Form1 : Form
    {
        CrystalReport1 objRpt;
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            objRpt = new CrystalReport1();
            string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\sample.mdb;";
            string strQry = "select * from sample";
            try
            {
                OleDbConnection oleConn = new OleDbConnection(connectionString);
                oleConn.Open();
                DataSet1 DS = new DataSet1();
                OleDbDataAdapter oleDA = new OleDbDataAdapter(strQry, oleConn);
                oleDA.Fill(DS, "sampledb");
                objRpt.SetDataSource(DS);
                crystalReportViewer1.ReportSource = objRpt;
                oleConn.Close();
            }
            catch
            {
            }
        }
    }
}




4. 출력


반응형
728x90
300x250

[C#.NET] OleDB를 이용한 우편번호 검색 구현하기

.NET Framework는 MS 제품에 효율성과 개발자들에게 생산성을 위하여 많은 기능을 제공하고 있습니다.
데이터베이스 프로그래밍 또한 몇 번 클릭을 통해 쉽게 구현할 수 있습니다.
기존에 우리가 많이 사용하는 엑셀을 쉽고 간편하게 제어할 수 있도록 .NET Framework 라이브러리에 이미 구성되어 있습니다.

이번 예제에서는 OLEDB를 이용한 우편번호 검색을 구현하는 방법을 소개하고자 합니다.


1. 작성 예제

큰 주제 : Excel과 Access를 활용한 데이터베이스 구현



이번에 만들 예제의 모습은 위의 그림과 같습니다.

1-1. 출력될 디렉토리에 반드시 존재해야할 파일

데이터베이스 파일이 필요합니다.
이번 예제에 사용된 자료를 첨부했으니 다운받아서 실습하시기 바랍니다.

address.xls
address.mdb

1-2. 폼 인터페이스 디자인



1-3. 소스 코드

엑셀을 이용한 자료 처리

using System.Data.OleDb;

namespace WindowsApplication
{
public partial class Form1 : Form
{
pubilc Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=|DataDirectory|\\address.xls;" +
"Extended Properties=Excel 8.0;";

string strQry;
OleDbConnection oleConn = new OleDbConnection(connectionString);
oleConn.Open();

strQry = "Select TOP 10 * FROM [Address$]";

OleDbDataAdapter oleData = new OleDbDataAdapter(strQry, oleConn);
DataTable excelData = new DataTable();

dataGridView1.DataSource = excelData;
oleData.Fill(excelData);
oleConn.Close();

// 자동 크기 조절을 하고자 할 때 옵션
for (int i = 0; i < dataGridView1.ColumnCount; i++)
   dataGridView1.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);

 
}
}


Access DB를 이용한 자료 처리

using System.Data.OleDb;

namespace WindowsApplication
{
public partial class Form1 : Form
{
pubilc Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=|DataDirectory|\\zipcode.mdb;";

string strQry;
OleDbConnection oleConn = new OleDbConnection(connectionString);
oleConn.Open();

strQry = "Select TOP 10 * FROM zipcode";

OleDbDataAdapter oleData = new OleDbDataAdapter(strQry, oleConn);
DataTable AccessData = new DataTable();

dataGridView1.DataSource = AccessData;
oleData.Fill(AccessData);
oleConn.Close();

// 자동 크기 조절을 하고자 할 때 옵션
for (int i = 0; i < dataGridView1.ColumnCount; i++)
   dataGridView1.AutoResizeColumn(i, DataGridViewAutoSizeColumnMode.AllCells);

 
}
}
}


2. 결론
Access는 중간 DBMS이라면, Excel은 작은 DBMS입니다.


3. 소스 코드
101223_OLEDB_C#_Lecture_Example.zip
반응형
728x90
300x250

[C#.NET] Delegate를 이용한 폼 처리

Delegate 개념과 이벤트 개념을 이해했다고 가정하고 진행합니다.
조사해본 폼 처리에 대한 방법은 다양합니다.

 
 1. 매개변수를 이용한 폼 처리 방법
 2. 전역변수를 이용한 폼 처리 방법
 3. Delegate 개념을 이용한 폼 처리 방법
 4. 클래스를 이용한 폼 처리 방법

 N......
 

방법은 많이 있지만, 그래도 수집한 자료 중에 가장 괜찮다고 생각하는 방법 중 Delegate와 이벤트를 이용한 것이 가장 C# 다운 방법이라 생각해서 올려보게 되었습니다. 다른 블로그에서 수집했었는데 출처를 잊어버려서 생략하겠습니다.


1. 프로그램 동작 과정

1-1. 폼 인터페이스 설계



1-2. Form1.cs



1-3. Form2.cs


2. 코드

Form2.cs 코드

 

namespace host
{
public delegate void toForm1(string s1, string s2);
public partial class Form2 : Form
{

public static event toForm1 toform1;

public Form2()
{
InitializeComponent();
}

private void Button1_Click(object sender, EventArgs e)
{
toform1("안녕하세요", "하이");
this.close();
}

}

}


Form1.cs

namespace host
{
public partial class Form1 : Form
{

public Form1()
{
InitializeComponent();
Form2.toform1 += new toForm1(labelchance);
}
void labelchance(string s1, string s2)
{
this.label1.Text = s1;
this.label2.Text = s2;
}
private void button1_Click(object sender, EventArgs e)
{
Form Fs = new Form2();
Fs.Show();
}

}
}

2-1. 소스 코드를 요약하자면,
Form1은 데이터가 수정될 값이 존재하는 곳을 의미하며, Form2는 데이터 수정 값을 전달하는 소스의 역할을 합니다.
이 코드를 실생활에 응용하자면, 우편번호 검색, 데이터 자료 처리에 응용 가능합니다.

2-2. 첨부(Attachment)
101223_C#_Delegate_Form_Example.zip

반응형
728x90
300x250

[C#.NET] openFileDialog를 이용한 파일 첨부 기반 예제

이번 예제는 openFileDialog를 활용하여 파일 첨부 기반을 만드는 방법을 소개하도록 하겠습니다.
이 강좌는 파일 처리 기능은 구현하지 않았습니다. 이유는 openFileDialog를 활용하는 것이 핵심 키워드이기 때문입니다.
이 점을 인지하고 읽어주시기 바랍니다.
한 가지 더 말씀드리자면, openFileDialog를 활용하는 예제이기에 파일 제약 조건에 관하여 언급하였습니다.


1. 폼 인터페이스 디자인



TextBox, Button, openFileDialog를 적절히 배치해주시기 바랍니다.

 

 


2. 소스 코드

Button을 더블 클릭하시어 소스코드를 불러오시고 입력하시기 바랍니다.


        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFile = new OpenFileDialog();
            openFile.DefaultExt = "jpg";
            openFile.Filter = "Images Files(*.jpg; *.jpeg; *.gif; *.bmp; *.png)|*.jpg;*.jpeg;*.gif;*.bmp;*.png";
            openFile.ShowDialog();
            if (openFile.FileNames.Length > 0)
            {
                foreach (string filename in openFile.FileNames)
                {
                    this.textBox1.Text = filename;
                }
            }
        }


openFile.DefaultExt = "기본확장자";
openFile.Filter = "항목이름정의1|확장자1;확장자2;  … 확장자n;|   … 항목이름정의n|확장자1;확장자2;  … 확장자n;";
openFile.ShowDialog();  -> 파일 열기 창 호출



3. 동작 과정




첨부(Attachment)
101222_c#_Example.zip

 

반응형
728x90
300x250
[C#.NET] Base64

Base64는?

컴퓨터 분야에서 쓰이는 Base 64 (베이스 육십사)란 8비트 이진 데이터(예를 들어 실행 파일이나, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식을 가리키는 개념이다.

원래 Base 64를 글자 그대로 번역하여 보면 64진법이란 뜻이다. 특별히 64진법이 컴퓨터에서 흥미로운 것은, 64가 2의 제곱수(64 = 26)이며, 2의 제곱수들에 기반한 진법들 중에서 화면에 표시되는 ASCII 문자들을 써서 표현할 수 있는 가장 큰 진법이기 때문이다. 즉, 다음 제곱수인 128진법에는 128개의 기호가 필요한데 화면에 표시되는 ASCII 문자들은 128개가 되지 않는다.

그런 까닭에 이 인코딩은 전자 메일을 통한 이진 데이터 전송 등에 많이 쓰이고 있다. Base 64에는 어떤 문자와 기호를 쓰느냐에 따라 여러 변종이 있지만, 잘 알려진 것은 모두 처음 62개는 알파벳 A-Z, a-z와 0-9를 사용하고 있으며 마지막 두 개를 어떤 기호를 쓰느냐의 차이만 있다.


출처 : Wikipedia

Base64는 이메일이나 SMS와 같은 데에서 많이 사용되고 있다고 합니다.



1. 소스 코드


        static void Main()
        {
            string str = "도도";
            str = EncodeTo64(str);
            Console.WriteLine(str);
            str = DecodeFrom64(str);
            Console.WriteLine(str);
        }
        public static string EncodeTo64(string toEncode)
        {
            byte[] toEncodeAsBytes = System.Text.Encoding.Unicode.GetBytes(toEncode);
            string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
            return returnValue;
        }
        public static string DecodeFrom64(string encodedData)
        {
            byte[] encodedDataAsBytes = System.Convert.FromBase64String(encodedData);
            string returnValue = System.Text.Encoding.Unicode.GetString(encodedDataAsBytes);
            return returnValue;
        }
}

출력 결과


[첨부(Attachment)]

101223_C#_Base64_example.7z

 

반응형
728x90
300x250

[C#.NET] 클래스 - Overriding 개념

C# Overriding은 불필요한 공통 변수 선언을 최소화하여 효율성을 높이는 개념입니다.
이전의 글 Override에서 언급한 부모와 자녀의 관계처럼 선언에 대해 관계를 형성하는 것으로 생각하시면 됩니다.


1. 코드

 

 


using System;
class Book
{
    public string title;
    public string editor;
    public string publisher;
    public decimal price;
    public int page;
    public Book(string intitle)
    {
        title = intitle;
    }
    public Book(string intitle, string ineditor)
    {
        title = intitle;
        editor = ineditor;
    }
    public Book(string intitle, string ineditor, string inpublisher, decimal inprice, int inpage)
    {
        title = intitle;
        editor = ineditor;
        publisher = inpublisher;
        price = inprice;
        page = inpage;
    }
    public void showfields()
    {
        Console.WriteLine("제목:" + title + "\n저자:" + editor + "\n출판사:"
            + publisher + "\n가격:" + price + "\n페이지:" + page + "\n");
    }
}
class Program
{
    static void Main()
    {
        Book ba = new Book("부의미래");
        Book bb = new Book("국화와 칼", "루스 베네딕트");
        Book bc = new Book("회계원리", "유관희", "흥문사", 23000, 549);
        ba.showfields();
        bb.showfields();
        bc.showfields();
    }
}
반응형
728x90
300x250

[C#.NET] 클래스 - 부모와 자녀의 파라메터 값을 중복 허용

만약 부모와 자녀가 갖고 있는 공통의 값이 예를 들자면 핸드폰이 있다고 칩시다.
cel이라는 파라메터가 둘 다 필요하게 될 것입니다.
자녀는 부모 없이 존재가능한가요?
즉 다시말하면 부모와 자녀와의 관계에서 공통적으로 갖는 특색이 중복되어야만 할 상황이 생길 때 해결하는 방법입니다.


1. 기본 클래스 방법(New 클래스를 이용)

이 예제에서 기본 클래스 BaseC 및 파생 클래스 DerivedC는 동일한 필드 이름 x를 사용하므로 상속된 필드의 값이 숨겨집니다.
이 예제는 new 한정자의 사용법을 보여 줍니다. 또한 정규화된 이름을 사용하여 기본 클래스의 숨겨진 멤버에 액세스하는 방법을 보여 줍니다.

using System;
public class BaseC
{
    public static int x = 55;
    public static int y = 22;
}
public class DerivedC : BaseC
{
    new public static int x = 100;
    static void Main()
    {
        Console.WriteLine(x);
        Console.WriteLine(BaseC.x);
        Console.WriteLine(y);
    }
}

100
55
22

이 예제에서 중첩 클래스는 기본 클래스에서 이름이 동일한 클래스를 숨깁니다. 이 예제에서는 new 한정자를 사용하여 경고 메시지를 제거하고 정규화된 이름을 사용하여 숨겨진 클래스 멤버에 액세스하는 방법을 보여 줍니다.


using System;
public class BaseC
{
    public class NestedC
    {
        public int x = 200;
        public int y;
    }
}
public class DerivedC : BaseC
{
    new public class NestedC
    {
        public int x = 100;
        public int y;
    }
    static void Main()
    {
        NestedC c1 = new NestedC();
        BaseC.NestedC c2 = new BaseC.NestedC();
        Console.WriteLine(c1.x);
        Console.WriteLine(c2.x);
    }
}

출력 : 100
         200



2. Virtual 선언과 Overide 이용


using System;

class Player
{
    virtual public void showMessage()
    {
        Console.WriteLine("Player 클래스의 메시지");
    }
}

class StarcraftPlayer : Player
{
    public override void showMessage()
    {
        Console.WriteLine("StarcraftPlayer");
    }
}

class Program
{
    static void Main()
    {
        StarcraftPlayer sp = new StarcraftPlayer();
        sp.showMessage();
        Player p = new Player();
        p.showMessage();
    }
}


반응형

'소프트웨어(SW) > MS - Visual C#.NET' 카테고리의 다른 글

[C#.NET] Base64  (0) 2010.12.22
[C#.NET] 클래스 - Overriding 개념  (0) 2010.11.24
[C#.NET] Out과 Ref의 차이점  (0) 2010.11.19
[C#.NET] foreach 문  (0) 2010.11.17
[C#.NET] 구조체 설명  (0) 2010.11.17

+ Recent posts