일반적으로 GridView 에서 키보드로 포커스이동이 아래 처럼 포커스가 행의 끝으로 가면

다음 행으로 넘어가게 되어있다.

이를 다음행으로 넘어가지 않고 그 행에 두고 싶다면 아래 코드를 추가해 주면된다.

this.gridView.OptionsNavigation.AutoMoveRowFocus = false;

아래 처럼 포커스 이동시 다음행으로 넘어가지 않는다.


XtraGrid 의 GridView 의 KeyDown 이벤트는 Cell 내부 값을 입력하는 경우에 이벤트가 발생되지 않는다.

Cell 내부의 KeyDown 이벤트를 주고싶은때는 

GridControl 의 EditorKeyDown 이벤트를 사용하면 된다.


아래코드를 보면 알수 있지만 Cell 값 편집모드에서 GridView 의 KeyDown 이벤트는 처리 되지 않는다.

        this.gridView.KeyDown += GridView_KeyDown;


        private void GridView_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.V && e.Control)
            {
                string clipBoard = Clipboard.GetText();

                if (!string.IsNullOrEmpty(clipBoard))
                {
                    MessageBox.Show(clipBoard);
                }
            }
        }

     

하지만 아래처런 GridControl 의 EditorKeyDown 이벤트로 처리하면 Cell 값 편집모드에서 KeyDown 이벤트가 처리된다.

        this.gridControl.EditorKeyDown += GridControl_EditorKeyDown;


        private void GridControl_EditorKeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.V && e.Control)
            {
                string clipBoard = Clipboard.GetText();

                if (!string.IsNullOrEmpty(clipBoard))
                {
                    MessageBox.Show(clipBoard);
                }
            }
        }


Grid 에 Data 가 정형화 되어있지 않은 경우 특정 셀의 컬럼에 길이 제한을 두고 싶을 때 사용하는 방법이다.

아래는 LOT 컬럼이 5자가 넘는 경우 처리하는 방법으로 아래처럼 표시가 된다.

using System.Collections.Generic;
using System.Windows.Forms;

using DevExpress.XtraGrid.Views.Grid.ViewInfo;

namespace WindowsFormsApp
{
    public partial class MainForm : Form

    {
        public MainForm()
        {
            InitializeComponent();

            this.gridView.ValidatingEditor += GridView_ValidatingEditor;

            TestData testData1 = new TestData();
            testData1.LOT = "L001";
            testData1.WAFER = "01";

            TestData testData2 = new TestData();
            testData2.LOT = "L001";
            testData2.WAFER = "02";

            List<TestData> testDatas = new List<TestData>();
            testDatas.Add(testData1);
            testDatas.Add(testData2);
            this.gridControl.DataSource = testDatas;
        }

        void GridView_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
        {
            string value_string = e.Value.ToString();
            GridViewInfo viewInfo = gridView.GetViewInfo() as GridViewInfo;
            GridCellInfo cellInfo = viewInfo.GetGridCellInfo(gridView.FocusedRowHandle, gridView.FocusedColumn);

            if (cellInfo.Column.FieldName == "LOT")
            {
                if (value_string.Length > 5)
                {
                    e.ErrorText = "The value is too long";
                    e.Valid = false;
                }
            }
        }

        class TestData
        {
            public string LOT { get; set; }
            public string WAFER { get; set; }
        }
    }
}


GridView 의 BestFitColumns() 는 데이터 길이에 따라 컬럼 너비를 자동으로 조절해 준다.

하지만 데이터가 많은 경우 컬럼 길이 계산을 위해 시간을 많이 소비해서

실제 화면에 보여지는데 시간이 걸린다.

이때 아래처럼 BestFitMaxRowCount 값을 설정하게되면 

데이터 전체가 아닌 특정 Row 까지의 데이터만 가지고 처리를 하게되어

화면에 보여지는데 걸리는 시간을 줄일 수 있다.


this.gridControl.DataSource = testDatas;

this.gridView.OptionsView.BestFitMaxRowCount = 100;

this.gridView.BestFitColumns();


XtraGrid 에 데이터 바인딩을 하면 처음 Row 를 선택하고 있는데

이를 선택하지 않는 상태로 변경하기 위해서는


데이터 바인딩을 하고

this.gridContro.DataSource = testDatas;


아래처럼 GridView 의 FocusInvalidRow() 를 호출해 주면된다.

this.gridView.FocusInvalidRow();

GridView 에서 특정 Row 의 Cell 을 Merge 하고 싶은 경우가 있는데 

찾아보니 참고할 만한 소스가 있어 기억을 위해 링크를 남긴다


https://github.com/DevExpress-Examples/how-to-merge-cells-horizontally-in-gridview-via-the-customdrawcell-event-e4039


실행해 보았는데 셀의 내용이 머지가 되기는 한데 가운데 선이 보이게되서 완벽하진 않다.

아래 그림처럼 2번째 행에 내용이 하나로 보여지긴 한데 Cell 간 선이 나타난다;;


테스트한 소스

CS.zip


CheckedComboBoxEdit 에 PlaceHolderText 기능을 적용하기 위해

 

checkedComboBoxEdit.Properties.NullText = "선택하세요.";

 

위처럼 코딩했는데 아래처럼 화면에 표시 되지 않았다.

 

ComboBoxEdit 에서는 이상없이 표시 되던 것이 CheckedComboBoxEdit 표시가 되지 않는다.

 

확인해 보니 아래 처럼 코딩해서 원하는 기능을 처리할수 있었다.

 

checkedComboBoxEdit.Properties.NullValuePromptShowForEmptyValue = true;

checkedComboBoxEdit.Properties.NullValuePrompt = "선택하세요.";

 

 

참고

https://www.devexpress.com/Support/Center/Question/Details/B199845/nulltext-does-not-display-on-checkedcomboboxedit

 

SearchControl 의 ButtonClick 이벤트에서 Search 버튼에 대한 이벤트를 처리하려면

ButtonPressedEventArgs 인자로 들어온 e 값에서 구분할수 있다.

 

if (e.Button.Kind == ButtonPredefines.Search) ..

 

 

Clear 버튼에 대한 이벤트를 처리하려면

 

if (e.Button.Kind == ButtonPredefines.Clear) ..

 

SearchControl 의 Button Event 에서는 기본적으로 두 버튼에 대해 이벤트가 처리된다.

 

+ Recent posts