dgv.Columns[index].Frozen = true; 

가장좌측에 이름이 있고 스크롤했다면 어떤건지 파악하기가 어렵지만

Frozen하면 고정되기때문에 파악이 쉬움.


dbView.Columns[index].DividerWidth = 수치;

index이전과 이후 사이의 구분자가 커져서 구분하기가 쉬워짐.



(지정한Enum명)Enum.ToObject(typeof(지정한Enum명), Index);



컬럼헤더에 체크박스를 추가하고, 이벤트를 추가했다면

체크박스 이벤트에

foreach (DataGridViewRow dgvRow in 그리드뷰네임.Rows)

{

         dgvRow.Cells["헤더네임"].Value = ((CheckBox)sender).Checked;

}



하게되면 선택한 경우 SelectAll또는 DeSelectAll이 된다


하지만, 체크박스에 EditBegin상태가 유지되고있다면

체크값이 변하지 않는다.


그리드뷰네임.EndEdit();


EndEdit를 해서 Edit모드를 종료 한 후 위 코드를 사용하면 정상적으로

모든 체크박스가 바뀐다.

DataGridView의 이벤트중 CellPainting 나 Load이벤트에


if (e.ColumnIndex == 0 && e.RowIndex == -1)

                {

                    e.PaintBackground(e.ClipBounds, false);


                    Point pt = e.CellBounds.Location;the cell


                    int nChkBoxWidth = 15;

                    int nChkBoxHeight = 15;

                    int offsetx = (e.CellBounds.Width - nChkBoxWidth) / 2;

                    int offsety = (e.CellBounds.Height - nChkBoxHeight) / 2;


                    pt.X += offsetx;

                    pt.Y += offsety;


                    CheckBox cb = new CheckBox();

                    cb.Size = new Size(nChkBoxWidth, nChkBoxHeight);

                    cb.Location = pt;

                    cb.Checked = true;

                    cb.CheckedChanged += new EventHandler(dgvCheckBox_CheckedChanged);


                    ((DataGridView)sender).Controls.Add(cb);


                    e.Handled = true;

                }


해당코드 입력

넣고자 하는 컬럼헤더에 Check박스위치를 계산해서 새로 그려주는 코드와 체크박스 이벤트 추가하는 코드임



DataGridVeiw이벤트에 EditingControlShowing추가

e.Control.KeyPress이벤트 연결


KeyPress와 연결한 함수에서


if (((DataGridViewTextBoxEditingControl)sender).Text.Length >= 제한할 길이 수 

  && ((DataGridViewTextBoxEditingControl)sender).SelectedText.Length <= 0)

      e.Handled = true;


SelectedTextLength는 블록 지정했을때 수정이 가능하게끔 하기 위함



bool배열이름= Enumerable.Repeat(true or false, 배열 수).ToArray();

이해하기 쉽게 말하면

DataTable은 리스트뷰 (Detail) 이라고 생각하면 이해가 쉽다.


DataTable tb  = new DataTable();


리스트뷰(Detail)에서 필요한 부분을 생각해보면


ColumnHeader, Rows, Columns가 필요할거고 각 항목별 값이 필요할것이다.


이해하기 쉽도록 풀어서 설명하는것..



 컬럼헤더1

 컬럼헤더2

 일

 1 

 이

 2 

 삼

 3 


위와 같은 형태로 만들고 싶다라고 한다면


row중 첫번째는 string이고, 그 다음은 int이므로 지정한다.

tb.Columns.Add("컬럼헤더1" , typeof(string));

tb.Columns.Add("컬럼헤더2", typeof(int));



DataRow dr = dt.NewRow();

dt에서 새로울 열을 만들것이기 때문에 dt로 만들어 주고


dr["컬럼헤더1"] = "일";

dr["컬럼헤더2"] = 1;

위와같이 지정하면


dr에 두개의 값이 저장된다

dr에 필요한것이 아니고 dt에 필요하므로


dt.Rows.Add(dr);

열을 추가해주면, DataTable에 저장된것이다.


저장된 DataTable(tb)를 ComboBox나 DataSource를 사용하는 곳에 쓸 수 있다.

ComboBox에서 각 항목별로 Tag를 등록해서 보여지는 값이 아닌

특정된 값을 가지고 오고 싶을때 사용 하는 방법


Ex) 일

     이

     삼

     사

     오


위와같이 

콤보박스에 보여지는데

선택했을때 1,2,3,4,5를 가지고 오는 방법..


Items.Add로 추가하지말고


DataTable을 이용해서 DataBinding시켜야 한다.


DataTable은 이해하기 쉽게 말하면 엑셀이나, 리스트라고 생각하면 쉽다


DataTable dt = new DataTable();


//

//    DataTable에 추가될 내용

//


필요한 데이터를 추가 한 후에


아래와 같이 코드를 작성하면


comboBox1.DataSource = dt;

comboBox1.ValueMember = "숨겨놓을 DataTable의 값";

comboBox1.DisplayMember = "보여질 DataTable의 컬럼헤더명";


보여질 값만 콤보박스에 보이고


선택한 항목에서 값을 가지고 오려면


comboBox1.SelectedItem.value로 가지고 오면 1,2,3,4,5를 가지고 올 수 있다.

'Programming > C#' 카테고리의 다른 글

bool 배열 한번에 초기화 하기  (0) 2016.11.23
DataTable 사용방법  (0) 2016.08.14
xml Element  (0) 2016.08.02
TrayIcon 좌클릭, 우클릭 메뉴 가능하게 하기  (0) 2016.04.25
메시지박스 자동 종료하기  (0) 2016.04.24

xml 내가사용했던것만.. 더 있지만 간단한것부터..


<1>                           <----------   Element

<2></2>               <----------- Element 1의  Child

</1>


// 소스는 아니니 참고하여 파일에서 가져오는지 아닌지 확인하고 만들것.


Element 객체를 만들고 CreateElement 1(<1>을 사용했기때문)

elementName.AppendChild(CreateNode 2)

하면 위와 같은 형태로 저장 할 수 있다.


elementName.AppendChild(CreateNode 3)을 하나 더 썻다면.

<1>                           <----------   Element

<2></2>               <----------- Element 1의  Child

<3></3>

</1>

위와 같은 형태가 된다.


<1>

<2>

<3>

</3>

</2>

</1>


위와 같은 형태로 만들고 싶다면


Element 객체를 3개를 만들어야 하며,  InnerText 를 이용하여

하위 Element를 포함해주어야 한다.

"일반적으로 String은 다 똑같다." 라고 알고있었는데


C++으로 코딩을 해보니 같은 String이지만


std::String과 닷넷String은 다르다


그래서 std::string으로 변수사용을 했다면 컨트롤에 있는 Text를


해당 변수에 넣어주기 위해서는 변환해주어야 한다.



std::string -> System::String 변환방법


#include <msclr\marshal_cppstd.h> // 헤더 추가하고


std::string 변수명 = mslr::interop::marshal_as<std::string>(System::String의 TEXT);



System::String -> std::string 변환방법


String^ temp = gcnew String(System::String변수명.c_str());



위와 같은 방법을 쓰면 변환이 가능하다.



+ Recent posts