프로그램/C#

gridview 의 button 의 생성 타이밍이 gridview.Add() 가 아니다.

(주)CKBcorp., 2016. 1. 20. 06:00
반응형


말 그대로다.
상황설명을 하면,

C# 의 DataGridView 에서 Cell Content 를 Button으로 지정하고,

상황에 따라 Button을 Show/Hide 를 통해 클릭 가능 / 불가능을 안내하려 했다.


근데, 왜그런지 몰라도 동적 생성한 gridView > cell > button 이 visible 이 안 먹었다.


코드는 대략 아래와 같았다.



        // gridView 안의 button 을 보여주거나 숨긴다. 

        public void GridBtnShowHide(DataGridView _grv, int columnNo, int rowNo, bool isVisible, string btntxt)

        {

            Button btn = _grv[columnNo, rowNo].Value as Button;

            if (btn != null) {      btn.Visible = isVisible;    btn.Text = btntxt;  }

        }




근데, GridView.Add() 를 통해  grid row 를 추가하고 나서 추가한 row 에 대해 바로 button 을 안 보이려 하니, 안 된다.


즉, 


GridView.Add();

GridBtnShowHide( 그리드뷰, 열번호, 행번호, false , "");


이렇게 하면 , 안됨.


원인은 btn 객체 = 그리드뷰 안의 버튼 객체 자체가 null 로 판정된다.

무슨 이야기냐....


GridView.Add() 로 row 자체를 생성했는데도 불구하고,

생성한 Row 안의 contents 인 button 은, 저 시점에서는 null 로 취급된다는 거다.


아마 화면 출력이 되야 객체가 생성되서 접근 가능한 거 같긴 한데, 

두시간정도 삽질하다가 포기했다. 인터넷 뒤져봐도 나와 비슷한 경우는 없는 듯 하고...

Button 대신 DataGridViewButtonColumn 으로 해봐도 안되고... 모르겠다.

간단하게 포기. 구리지만 텍스트를 사용하기로 결정.






이상 끝. 참고.


반응형