퇴근5분전

사용자 삽입 이미지

데이타 테이블 내용 그대로를 그리는 메서드 곧 리포트 관련해서 테이블을 그려주거나
프린트용 도큐먼트에 그려줄때 바둑판그리기와 함께 내부에 글써주는 메서드를 만들었었음.

아래 소스를 실행하기 위해서 위 그림처럼 그리드 뷰 와 픽쳐박스, 버튼을 두고 작업하면 됨.
 public partial class Form1 : Form
    {
        DataTable dt = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void DrawTable(Graphics g, DataTable dt)
        {
            if (dt != null && g != null)
            {
                RectangleF rectF = new RectangleF(0f, 0f, 200f, 25f);
                float maxRowCount = Convert.ToInt32(dt.Rows.Count);
                float maxColCount = Convert.ToInt32(dt.Columns.Count);
                for (float y = 0.0f; y < maxRowCount; y += 1.0f)
                {
                    DataRow dr = dt.Rows[Convert.ToInt32(y)];
                    for (float x = 0.0f; x < maxColCount; x += 1.0f)
                    {
                        SizeF sf = g.MeasureString(dr[Convert.ToInt32(x)].ToString(), new Font("굴림체", 10.0f));
                        // 높이는 추후 조정..
                        g.DrawRectangle(new Pen(Color.Black, 1.0f), x * rectF.Width, y * rectF.Height, rectF.Width, rectF.Height);
                        g.DrawString(string.Format("{0:00} dr[{1:00}]: {2:00}", y, x, dr[Convert.ToInt32(x)]), new Font("굴림체", 10.0f), Brushes.Black, new RectangleF(x * rectF.Width + (sf.Width / 2), y * rectF.Height + sf.Height / 2, rectF.Width, rectF.Height));
                    }
                }
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            dt = new DataTable();
            dt.Columns.Add("A");
            dt.Columns.Add("B");

            dt.Rows.Add(1, 2);
            dt.Rows.Add(3, 4);
            dt.Rows.Add(5, 6);
            dt.Rows.Add(7, 8);

            dataGridView1.DataSource = dt;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if( dt != null ) DrawTable(Graphics.FromHwnd(pictureBox1.Handle), dt);
        }

    }

사용자 삽입 이미지

이건 내 피씨에 즐겨찾기 폴더의 내용을 그대로 메뉴 스트립에 옮긴것임.
메뉴 클릭시 익스플로어를 실행하면서 해당 링크를 실행함.

해본것은 그냥 재귀호출을 통해 트리뷰나 메뉴스트립관련해서 똑같은 처리 방식을
테스트 해본것임.



아래 객체를 이용해서
FavoritesMenuItems fMenuItem = new FavoritesMenuItems();
mainMenu1.MenuItems.Add( fMenuItem.GetDirectory( fMenuItem.FavoritesPath) );  

이 두줄이면 위 폼처럼 만들어짐.


아래 객체는 즐겨찾기 폴더에 데이타를 메뉴 스트립으로 만들어주는 객체임.

 /// <summary>
 /// 탐색기 - 즐겨찾기
 /// 메뉴로 등록하는 class
 /// </summary>
 class FavoritesMenuItems
 {
  public string FavoritesPath;
  Hashtable  htArray  = new Hashtable();

  public   FavoritesMenuItems()
  {   
   FavoritesPath = Environment.GetFolderPath( Environment.SpecialFolder.Favorites );  
  }   

  public MenuItem GetDirectory( string path)
  {
   System.Windows.Forms.MenuItem rootItem  = new MenuItem();  

   string[]   directorys = System.IO.Directory.GetDirectories( path );
   string[]   files  = System.IO.Directory.GetFiles( path );

   rootItem.Text = GetItemName( path);

   foreach( string directoryName in directorys)
   {    
    rootItem.MenuItems.Add(GetDirectory( directoryName ));
   }

   foreach( string fileName in files)
   {
    System.Windows.Forms.MenuItem  tempItem = new MenuItem();
    // Ht에 저장하면서 MenuItem에 등록!!
    SetArray(tempItem,  GetItemName( fileName ), fileName, 0);      
    tempItem.Click += new EventHandler(tempItem_Click);
    rootItem.MenuItems.Add( tempItem );  
   }
   return rootItem;
  }

  private string  GetItemName(string path)
  {
   int idx  = 0;

   idx = path.LastIndexOf(@"\");

   if( idx  <=  -1 ) return path;

   return path.Substring( idx+1, path.Length - idx-1);
  } 

 
  // 중복된 Key는 카운트 반영!
  private void SetArray(System.Windows.Forms.MenuItem  tempItem, string Key, string Value, int i)
  {   
   if( htArray.Contains( Key) == false)
   {    
    tempItem.Text = Key;
    htArray.Add( Key, Value);    
   }
   else
   {
    SetArray(tempItem,  Key + (i++).ToString() , Value, i);
   }
  }

  // 자기자신을 이용한 Value값 셀렉트
  private string this[string Key]
  {
   get
   {
    return (string)htArray[ Key ];
   }
  }

  // 서브메뉴에 대한 클릭이벤트..
  private void tempItem_Click(object sender, EventArgs e)
  {
   //MessageBox.Show( this[((MenuItem)sender).Text] );
   if( this[((MenuItem)sender).Text].Trim().CompareTo("") == 0)
    return;

   System.Diagnostics.ProcessStartInfo  pcssinfo = new System.Diagnostics.ProcessStartInfo( "explorer", this[((MenuItem)sender).Text]);
   System.Diagnostics.Process.Start( pcssinfo );
// 익스플로어를 실행함.
  }
 }

ps : 음 참 별걸 다 적용했다는 생각이 듬...

System.Diagnostics.ProcessStartInfo  pcssinfo
= new System.Diagnostics.ProcessStartInfo( "isqlw", dbString[ Dbtype.STG ]);
System.Diagnostics.Process.Start( pcssinfo );

isqlw 는 2000 일때의 실행 파일명이었던듯 함.
사용자 삽입 이미지

이건 SqlManager의 속성을 보면 실행파일명이 나오는데
cmd 창에   실행명 /? 을 넣으면 위와 같은 알림창이 뜸.
위 정보를 이용해서 매니져를 여러개의 데이타베이스 서버중에 서버를 지정해서 접속이 가능함.

'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글

드레그 앤 드랍! (2)  (0) 2009.05.09
드래그 앤 드랍!  (0) 2009.05.09
데이타테이블 컬럼위치 바꾸기  (0) 2009.05.08
이벤트  (0) 2009.05.08
Enum 과 Enum 비트 마스크  (0) 2009.05.08

전에 데이타그리드뷰를 다뤄보다가 열이동을 보다가 직접 만들어본 메서드임.



// 데이타 테이블에 담긴 컬럼을 위치를 바꾸는 메서드.  
  private DataTable ChangColumn(DataTable  sourceDt ,int ColumnIndex1 , int ColumnIndex2 )
   {
    DataTable dt  = new DataTable();
    if( sourceDt == null) return dt;

    for(int i = 0; i < sourceDt.Columns.Count ; i ++)
    {
     if( i == ColumnIndex1)
     {
      dt.Columns.Add( sourceDt.Columns[ ColumnIndex2 ].ColumnName );
     }
     else if ( i == ColumnIndex2 )
     {
      dt.Columns.Add( sourceDt.Columns[ ColumnIndex1 ].ColumnName );
     }    
     else
     {
      dt.Columns.Add( sourceDt.Columns[i].ColumnName );
     }
    }

    foreach( DataRow dr  in sourceDt.Rows )
    {
     DataRow insertDr  =  dt.NewRow();

     for(int j = 0; j < dr.ItemArray.Length ; j ++)
     {
      if( j == ColumnIndex1)
      {
       insertDr[j] = dr[ ColumnIndex2 ];
      }
      else if ( j == ColumnIndex2 )
      {
       insertDr[j] = dr[ ColumnIndex1 ];      
      }     
      else
      {
       insertDr[j] = dr[ j ];      
      }
     }
     dt.Rows.Add( insertDr );
    }

    return dt;

   }


//  datatable.Rows.Insert() 와  datatable.ImportRow()
에서

같은 Hash코드를 가진(동일 메모리 공간) Row를 DataTable에 입력시

ImportRow는 적용되지만 Insert()는 안됨.

해당 RowCollection 과 관련되어
Insert시 해당 컬렉션에 DataRow가 존재하며 에러 반환.
Import는 있든 없든 무조건 DataRow를 복사해서 추가함.

ex)
  1 : DataRow drd  = ds.Tables[0].NewRow();
  2 :   DataRow drd  = ds.Tables[0].Rows[0];

 ds.Tables[0].Rows.Add( drd); 
 ds.Tables[0].ImportRow( drd );  

2 -> Add나 Insert 는 안들어감. Import는 들어감.


'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글

드래그 앤 드랍!  (0) 2009.05.09
Ms-Sql을 띠우자!  (0) 2009.05.08
이벤트  (0) 2009.05.08
Enum 과 Enum 비트 마스크  (0) 2009.05.08
Xml 직렬화...  (0) 2009.05.08


 이 파일은 내 친구 철호군이 닷넷 프로그래밍을 하고자 하여
도움을 주고자 열심히 만들어서 주었다.

 근 1년이 다되어 읽어보니 하하... 설명을 해주어야 했던것들이 많이 보이는...
파워포인트는 역시 어렵다!

aaa bbb ccc ddd eee fff
0_0 0_1 0_2 0_3 0_4 0_5
1_0 1_1 1_2 1_3 1_4 1_5
2_0 2_1 2_2 2_3 2_4 2_5
3_0 3_1 3_2 3_3 3_4 3_5
4_0 4_1 4_2 4_3 4_4 4_5
5_0 5_1 5_2 5_3 5_4 5_5
6_0 6_1 6_2 6_3 6_4 6_5
7_0 7_1 7_2 7_3 7_4 7_5
8_0 8_1 8_2 8_3 8_4 8_5
9_0 9_1 9_2 9_3 9_4 9_5





위 소스는 리피터를 사용한 예제등를 이용해 Asp.Net 웹사이트를 빌드해서 나온
창에 소스보기를 하여 부분을 카피해서 복사한 내용임
원본 asp.Net 프로젝트 소스

  <script type="text/javascript" src="debuger/trace.js" ></script>
  <script type="text/javascript" >
   // 첫번째 사용법.
   var    ar  = new Array();
   ar[0] = '1';
   ar[1] = '2';
   ar[2] = '3';
   ar[3] = '4';
   ar[4] = '5';


   // 두번째 사용법
   var    ar2   =  Array();
   ar2 = {aaa:51,bbb:52,ccc:53};


   // 복합 사용법

   var ar3  = new Array();
   // [0]   [0                ],[1               ]
   ar3[0] = [{aa:1, bb:2, cc:3},{aa:4, bb:5, cc:6}]

   function load()
   {
    traceArr( ar);

    trace("ar[1] : "+ar[1]);
    trace("ar2.aaa :" + ar2.aaa);
    trace("ar3[0][0].aa :" + ar3[0][0].aa);
    trace("ar3[0][0].cc :" + ar3[0][1].cc);
   }
  </script>

결과 :

사용자 삽입 이미지

'# 6) JavaScript' 카테고리의 다른 글

[javascript] 정규식 관련..  (0) 2010.11.18
메뉴] 자바스크립트로 만든 메뉴 객체  (0) 2009.05.09
자바스크립트 디버거  (0) 2009.05.08
웹 에서 F1키 사용하기.  (0) 2009.05.08
메세지박스  (0) 2009.05.02

Trace라는 자바스크립트 디버거임

지금까지 웹프로젝트에서 늘 사용하던 프로그램임.

사용법이 간단함.

추적기(Tracer)은 매우 유용한 어플리케이션이다. 때문에, trace.js 파일 하나만 호출하여 작업할 수 있도록 하였다. 이 파일은 자체적으로 실행된다.

<script type="Javascript" src="d:/JavaDebugger/trace.js"></script>
추적기 함수 목록은 다음과 같다. 각 함수들은 개별적인 요소들을 갖는다.

trace(): 이 함수는 어플리케이션에서 alert("Helo World"); 대신에 trace("hello world");로 사용할 수 있다. 추적기는 숫자와 색상을 곁들여서 결과를 출력한다.
traceArr(): 이 함수는 배열을 표시하고 배열의 위치(position)별 요소를 보여준다.
traceAssoc(): 연관배열(associative array)[1]을 위한 함수다. 연관배열에 이 함수를 사용한다면 키(key)와 각 배열 요소의 값을 보여준다.
traceStr(): 이 함수는 traceArr()과 거의 비슷하지만, 문자열에 동작하고 문자열의 문자들을 보여준다.
Watch: Watch는 함수(function)가 아닌 기능(functionality)이다.



이거 가져왔던 곳을 모르겠음...
Trace파일은 추가로 넣지 않음.

사용자 삽입 이미지

< Trace 화면 >

'# 6) JavaScript' 카테고리의 다른 글

메뉴] 자바스크립트로 만든 메뉴 객체  (0) 2009.05.09
자바스크립트 Array사용  (0) 2009.05.08
웹 에서 F1키 사용하기.  (0) 2009.05.08
메세지박스  (0) 2009.05.02
자바스크립트로 만든 로또프로그램.  (0) 2009.05.02

객체지향 을 처음 관심을 둘때
내가 만든 객체도 어떤 이벤트에 대한 동작을 해야 하지 않는가? 라는 의문이 생기면서
방법을 찾다가 한참만에 찾았었음.

Vs2003으로 되있는걸 보면... 웹할때인듯 한데 C#시작하고 1년이 넘어서인가보다.

이벤트란?  객체에 어떤행동이나 상태변화등에 특정 행동을 정의 함으로써
그 행동이나 상태변화에 대응하기 쉽게함.

곧 사람이 외부에서 때렸을때 악! 소리를 낸다라든가?
밥을 먹다보니 위가 가득 차서 배부르다는 느낌을 받는다든가?


EventObject    evtObj = new EventObject();
 ...
evtObj.intState_EventHandle  +=new intState(evtObj_intState_EventHandle);
...
private void evtObj_intState_EventHandle() // 이벤트 발생시 두번째 호출
{
    MessageBox.Show("값을 바꿨네!");
}

 evtObj.EventTarget = 10;  // 이벤트 발생 시점이 됨.

 delegate  void intState();

 class    EventObject
 {
  int  eventTarget =  0;

  public EventObject()
  {
   this.intState_EventHandle +=new intState(StateChange);
  }

  public int EventTarget
  {
   get { return this.eventTarget;}
   set {
     int i = this.eventTarget;
     
     this.eventTarget = value;

     if( i != this.eventTarget && intState_EventHandle != null)
       intState_EventHandle();
   }
  }
 
  public event intState     intState_EventHandle;

  public  void  StateChange()
  {
    MessageBox.Show("누가 바꾸래!");              // 이벤트 발생시 처음 호출

  }

 }


이벤트가 발생시 이벤트 처리자로 추가된 순서대로 호출이 됨.


// 아참 떠오르는건 엄준일님 이벤트 강좌를 보고 이걸 했던것 같음.

'# 2) .Net ( Vs 2005 ) > 기타' 카테고리의 다른 글

Ms-Sql을 띠우자!  (0) 2009.05.08
데이타테이블 컬럼위치 바꾸기  (0) 2009.05.08
Enum 과 Enum 비트 마스크  (0) 2009.05.08
Xml 직렬화...  (0) 2009.05.08
정규식] 똑같은 글자가 몇개?  (2) 2009.05.08

마우스를 올리고, 클릭하면 해당 row의 바탕색이 바뀜.
header1 header2 header3
dataRow 1 dataRow 1 dataRow 1
dataRow 2 dataRow 2 dataRow 2
dataRow 3 dataRow 3 dataRow 3
dataRow 4 dataRow 4 dataRow 4
소스 파일 :

'# 2) .Net ( Vs 2005 ) > WebForm' 카테고리의 다른 글

철호야! 공부하자!  (0) 2009.05.08
리피터 사용!!  (0) 2009.05.08
기존의 웹프로젝트 페이지를 그대로 이용하기.  (0) 2009.05.08
트리뷰 노드 추가 재귀 함수.  (0) 2009.05.02
페이징 컨트롤러  (0) 2009.05.01