DataGridView에서 마우스 우클릭시 메뉴 아이템 출력되도록 합니다.

 

메뉴에는 추가, 수정, 삭제가 존재 합니다.

 

아래와 코드와 같은 이벤트 발생 코드를 작성합니다.

#region mainGridView_CellContextMenuStripNeeded(sender, e)

/// <summary>
/// 셀의 바로가기 메뉴가 필요할 때 발생합니다.
/// </summary>
/// <param name="sender">이벤트 발생자 입니다.</param>
/// <param name="e">이벤트 인자 입니다.</param>
private void mainGridView_CellContextMenuStripNeeded(object sender, DataGridViewCellContextMenuStripNeededEventArgs e)
{
	if (e.RowIndex > -1 && e.ColumnIndex > -1)
	{
		this.mainGridView.CurrentCell = this.mainGridView.Rows[e.RowIndex].Cells[e.ColumnIndex];
		e.ContextMenuStrip = GetContextMenuStrip();
	}
}

#endregion

 

이전 포스트에도 있던 컨텍스트 메뉴 스트립 소스 입니다.

 

#region GetContextMenuStrip()

/// <summary>
/// 컨텍스트 메뉴 스트립을 가져옵니다.
/// </summary>
/// <returns>컨텍스트 메뉴 스트립을 리턴합니다.</returns>
private ContextMenuStrip GetContextMenuStrip()
{
        ContextMenuStrip contextMenuStrip = new ContextMenuStrip();

        ToolStripMenuItem addItem    = new ToolStripMenuItem("추가");
        ToolStripMenuItem updateItem = new ToolStripMenuItem("수정");
        ToolStripMenuItem deleteItem = new ToolStripMenuItem("삭제");

        contextMenuStrip.Items.AddRange(new ToolStripItem[]
        {
                addItem,
                updateItem,
                deleteItem
        });

        addItem.Click	 += addItem_Click;
        updateItem.Click += updateItem_Click;
        deleteItem.Click += deleteItem_Click;

        return contextMenuStrip;

}

#endregion
  1. 123 2021.01.24 22:45

    동작안하는데요?
    제발좀 확인하고 공유하세요

DataGridView에 데이터 삭제하는 메서드 입니다

 

삭제 시 데이터소스를 null로 변경 후

 

다시 새로운 데이터 소스를 삽입합니다.

 

그래야 삭제 시 에러 발생 안됨

 

혹은  e.Cancel = true로 설정하는데 이 항목은 테스트 안해봤음

 

#region mainDeleteButton_Click(sender, e)

		/// <summary>
		/// 삭제 버튼 클릭시 동작합니다.
		/// </summary>
		/// <param name="sender">이벤트 발생자 입니다.</param>
		/// <param name="e">이벤트 인자 입니다.</param>
		private void mainDeleteButton_Click(object sender, EventArgs e)
		{
			foreach (DataGridViewRow row in this.mainGridView.SelectedRows)
			{
				MainModel focusItem = row.DataBoundItem as MainModel;

				if(focusItem == null)
				{
					MessageBox.Show("삭제할 항목이 없습니다.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
					return;
				}
				if (MessageBox.Show("해당 항목을 삭제하시겠습니까?", "Confirmation", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel)
				{
					return;
				}

				try
				{
					SetMainDataGridView(null);

					QueryHelper.DeleteItem(focusItem.ID);

					//this.sourceList.Remove(focusItem);

					SetMainDataGridView(this.sourceList);

				}
				catch (Exception exception)
				{
					MessageBox.Show(exception.ToString());
				}
				finally
				{
					SetEditMode(EditMode.Normal);

					UpdateMainControlData(focusItem);
				}

			}
		}

		#endregion

DataGridView에서 선택한 행의 객체 가져오기 입니다.

 

foreach (DataGridViewRow row in this.mainGridView.SelectedRows)
{
	MainModel item = row.DataBoundItem as MainModel;

	UpdateMainControlData(item);
}

 

C#에서 DataGridView 컨트롤에 데이터 삽입하는 방법 입니다.


DataGridView를 사용하게 되면 데이터 삽입하고 나면 엑셀과 같은 형식으로 데이터를 뿌려주게 됩니다.


디자이너에서 Column도 추가하고 그 안에 데이터도 삽입할 수 있으나, 코드로 작성해봤습니다.


그리고 보통 FormLoad 될 때 작성된 코드를 불러오도록 하는 방법도 있으나


저는 그냥 생성자 안에서 모두 작성하였습니다.



우선 Form에 DataGridView 컨트롤을 추가합니다.




그리고 아래와 같이 코드를 작성합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
using System.Data;
using System.Windows.Forms;
 
namespace WindowsFormsApp3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
 
            DataTable table = new DataTable();
 
            // column을 추가합니다.
            table.Columns.Add("ID"typeof(string));
            table.Columns.Add("제목"typeof(string));
            table.Columns.Add("구분"typeof(string));
            table.Columns.Add("생성일"typeof(string));
            table.Columns.Add("수정일"typeof(string));
 
            // 각각의 행에 내용을 입력합니다.
            table.Rows.Add("ID 1""제목 1번""사용중""2019/03/11""2019/03/18");
            table.Rows.Add("ID 2""제목 2번""미사용""2019/03/12""2019/03/18");
            table.Rows.Add("ID 3""제목 3번""미사용""2019/03/13""2019/03/18");
            table.Rows.Add("ID 4""제목 4번""사용중""2019/03/14""2019/03/18");
 
            // 값들이 입력된 테이블을 DataGridView에 입력합니다.
            dataGridView1.DataSource = table;
        }
    }
}
 
cs



코드 작성 완료 후 빌드를 하면 아래와 같이 출력이 됩니다.



+ Recent posts