EMDI는 지금도 개발중

C# : FlexGrid 셀 데이터 숫자만 또는 문자만 가능하게 설정 How to insert Cell value only Letter or Number in FlexGrid at C# 본문

언어/C#

C# : FlexGrid 셀 데이터 숫자만 또는 문자만 가능하게 설정 How to insert Cell value only Letter or Number in FlexGrid at C#

EMDI 2019. 5. 30. 16:25

이번 글에서는 FlexGird의 셀(Cell)에 내용을 입력할 때, 그 입력하는 내용이 숫자만 또는 숫자와 문자만 입력되도록 설정해주는 방법에 대해 써보도록 하겠습니다.

  • FlexGrid의 셀 안에 특수문자 또는 문자를 막는 방법은 여러가지가 있습니다.
  1. 정규식을 통해 숫자 또는 문자만 가능하도록 설정하기
  2. System.Char에 있는 옵션을 통해 숫자 또는 문자만 가능하도록 설정하기

둘다 셀 안에 내용을 입력하려고 할 때 막을 수 있지만 저는 개인적으로 system에 있는 Char를 사용하는 것을 선호합니다. 정규식으로 설정하면 뭔가 매끄러워 보이지 않더군요ㅠㅠ

 

그럼 System.Char를 이용해서 숫자 또는 문자만 되고 나머지는 막는 방법에 대해 설명하도록 하겠습니다. 우선 그리드에 이벤트를 걸어줘야하는데 저는 FlexGridV2_KeyPressEdit 이벤트 핸들러를 사용하였습니다. 해당 KeyPressEdit의 이벤트 핸들러를 그리드 속성에 찾아보시려고 한다면 보이지 않으실겁니다. 이 이벤트 핸들러는 소스상에서 추가할 수 있으며, 속성에는 KeyPressEdit이 아닌 KeyPress만 보입니다.

grid1.FlexGridV2.KeyPressEdit += new KeyPressEditEventHandler(FlexGridV2_KeyPressEdit); 
grid1.KeyPress += new KeyPressEventHandler(grid1_KeyPress);

 

KeyPress는 KeyPressEdit과 KeyPress 두가지로 나눕니다. 둘의 차이는 음... 정확하게는 저도 잘 모르겠는데 KeyPress에는 e.Col, e.Row 과 같은 그리드 내의 Column 위치와 Row 위치를 알 수 없고 Edit에서는 해당 e.Col과 e.Row가 있습니다.

private void FlexGridV2_KeyPressEdit(object sender, KeyPressEditEventArgs e)
{

    if (e.Col < 0 || e.Row < grid1.Rows.Fixed)
    return;

    string szColName, szValue;
    bool bValid;
    szColName = grid1.Cols[e.Col].Name;
    szValue = grid1[e.Row, szColName].ToString();

    if (szColName == "연락처")
    {
        // 숫자만 입력할 수 있도록 제한한다.
        if (!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back)))
        {
            e.Handled = true;
        }
    }
    else if (szColName == "사용자명")
    {
        // 문자 또는 숫자가능
        if (!(char.IsLetterOrDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back)))
        {
        	e.Handled = true;
        }
    }
}

 

위의 소스와 같이 char.IsDigit 또는 char.IsLetterOrDigit 등을 사용하여 원하지 않는 문자를 막을 수 있습니다.

Comments