GridView에서 마우스 우클릭 했을 때 달력이 출력되도록 할 수 있습니다.

 

출력된 달력에서 날짜 변경 시 그 행의 날짜 입력 값이 변경됩니다.

 

public partial class Form1 : Form
    {   
        public Form1()
        {
            InitializeComponent();

            this.gridView1.MouseDown += GridView1_MouseDown;

            this.gridControl1.DataSource = CreateTable(5);
        }

        #region GridView1_MouseDown(sender, e)
        /// <summary>
        /// 마우스 클릭 했을 때 동작합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void GridView1_MouseDown(object sender, MouseEventArgs e)
        {
            GridHitInfo hitInfo = gridView1.CalcHitInfo(e.Location);

            ClearForm();

            if(e.Button == MouseButtons.Right && (hitInfo.HitTest == GridHitTest.RowCell || hitInfo.HitTest == GridHitTest.Row))
            { 
                DateEdit dateEdit = new DateEdit();

                dateEdit.EditValue = this.gridView1.GetRowCellValue(hitInfo.RowHandle, gridView1.Columns["Date"]);
                dateEditForm = new VistaPopupDateEditForm(dateEdit);
                dateEditForm.Calendar.EditDateModified += new EventHandler(OnEditDateModified);

                dateEditForm.ClosePopup();

                dateEditForm.Tag = hitInfo.RowHandle;

                dateEditForm.Location = PointToScreen(e.Location);

                dateEditForm.Size = dateEditForm.CalcFormSize();

                dateEditForm.ShowPopupForm();
            }
        }

        #endregion

        #region CreateTable(rowCount)

        /// <summary>
        /// 테이블을 생성합니다.
        /// </summary>
        /// <param name="rowCount">행 개수 입니다.</param>
        /// <returns>테이블 입니다.</returns>
        private DataTable CreateTable(int rowCount)
        {
            DataTable table = new DataTable();

            table.Columns.Add("Name"  , typeof(string));
            table.Columns.Add("ID"    , typeof(int));
            table.Columns.Add("Number", typeof(int));
            table.Columns.Add("Date"  , typeof(DateTime));

            for (int i = 0; i < rowCount; i++)
            {
                table.Rows.Add(new object[]
                {
                    string.Format("Name{0}", i), i, 3-i, DateTime.Now.AddDays(i)
                });
            }

            return table;
        }

        #endregion

        VistaPopupDateEditForm dateEditForm;

        #region ClearForm()

        /// <summary>
        /// 데이터를 초기화 합니다.
        /// </summary>
        private void ClearForm()
        { 
            if(dateEditForm != null)
            {
                dateEditForm.Calendar.EditDateModified -= new EventHandler(OnEditDateModified);
                dateEditForm.ClosePopup();
                dateEditForm.Dispose();
            }
        }

        #endregion

        #region OnEditDateModified(sender, e)

        /// <summary>
        /// 날짜를 갱신합니다.
        /// </summary>
        /// <param name="sender">이벤트 발생자 입니다.</param>
        /// <param name="e">이벤트 인자 입니다.</param>
        private void OnEditDateModified(object sender, EventArgs e)
        {
            int rowHandle = Convert.ToInt32(dateEditForm.Tag);
            gridView1.SetRowCellValue(rowHandle, gridView1.Columns["Date"], dateEditForm.Calendar.DateTime);
            dateEditForm.HidePopupForm();
        }


        #endregion

    }

 

 

  1. 잘 보고 갑니다~~

날짜 입력할 때 DateEdit을 빈칸으로 두고 내용 전달 시 null 값이 들어가거나 공백으로 들어가지 않을까라는

 

생각을 하고 쿼리문에 전달했는데 null도 아니고 공백으로 받아지지 않았습니다.

 

null이나 공백으로 전달될거라 당연히 생각하고 왜 안되지 하면서

 

쿼리문이 잘못되었나 한참 찾아보고 했는데 문득 어떤값이 전달이 될까 하고 확인해보니

 

'0001-01-01 12:00:00' 으로 전달되는것을 확인했습니다.

 

값 입력되는 부분에서 처리를 잘못하여 저 값이 넘어갈수도 있다라는 생각이 들었으나 우선 저 값이 넘어가는 것을 확인

 

했기에 날짜 조회시 저 내용을 반영하여 날짜 조회를 하니 정상적으로 날짜가 조회 되었습니다.

  1. 미드다시보기 2020.07.07 16:53

    잘 보고 갑니다~~

+ Recent posts