728x90
반응형
728x170
▶ ListItem.cs
namespace TestProject
{
/// <summary>
/// 리스트 항목
/// </summary>
public class ListItem
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 값 - Value
/// <summary>
/// 값
/// </summary>
public string Value { get; set; }
#endregion
#region 텍스트 - Text
/// <summary>
/// 텍스트
/// </summary>
public string Text { get; set; }
#endregion
#region 태그 - Tag
/// <summary>
/// 태그
/// </summary>
public object Tag { get; set; }
#endregion
}
}
728x90
▶ MainForm.cs
using System;
using System.Collections.ObjectModel;
using System.Text;
using System.Windows.Forms;
namespace TestProject
{
/// <summary>
/// 메인 폼
/// </summary>
public partial class MainForm : Form
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Class
////////////////////////////////////////////////////////////////////////////////////////// Private
#region 그리드 항목 - GridItem
/// <summary>
/// 그리드 항목
/// </summary>
private class GridItem
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 제목 - Title
/// <summary>
/// 제목
/// </summary>
public string Title { get; set; }
#endregion
#region 타입 - Type
/// <summary>
/// 타입
/// </summary>
public string Type { get; set; }
#endregion
#region 값 1 - Value1
/// <summary>
/// 값 1
/// </summary>
public string Value1 { get; set; }
#endregion
#region 값 2 - Value2
/// <summary>
/// 값 2
/// </summary>
public string Value2 { get; set; }
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 컬렉션 구하기 - GetCollection()
/// <summary>
/// 컬렉션 구하기
/// </summary>
/// <returns>컬렉션</returns>
public static ObservableCollection<GridItem> GetCollection()
{
ObservableCollection<GridItem> collection = new ObservableCollection<GridItem>();
collection.Add(new GridItem() { Title = "항목1", Type = "A" , Value1 = "A", Value2 = "" });
collection.Add(new GridItem() { Title = "항목2", Type = "B" , Value1 = "" , Value2 = "B" });
collection.Add(new GridItem() { Title = "항목3", Type = "A" , Value1 = "A", Value2 = "" });
collection.Add(new GridItem() { Title = "항목4", Type = "Both", Value1 = "A", Value2 = "B" });
collection.Add(new GridItem() { Title = "항목5", Type = "B" , Value1 = "" , Value2 = "B" });
return collection;
}
#endregion
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 생성자 - MainForm()
/// <summary>
/// 생성자
/// </summary>
public MainForm()
{
InitializeComponent();
InitializeColumns();
this.dataGridView.AllowUserToAddRows = false;
this.dataGridView.AllowUserToDeleteRows = false;
this.dataGridView.AllowUserToOrderColumns = false;
this.dataGridView.AllowUserToResizeRows = false;
this.dataGridView.RowHeadersVisible = false;
this.dataGridView.DataSource = GridItem.GetCollection();
this.dataGridView.CellClick += dataGridView_CellClick;
this.dataGridView.EditingControlShowing += dataGridView_EditingControlShowing;
this.dataGridView.CellValueChanged += dataGridView_CellValueChanged;
}
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Private
//////////////////////////////////////////////////////////////////////////////// Event
#region 데이터 그리드 뷰 셀 클릭시 처리하기 - dataGridView_CellClick(sender, e)
/// <summary>
/// 데이터 그리드 뷰 셀 클릭시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void dataGridView_CellClick(object sender, DataGridViewCellEventArgs e)
{
if((e.RowIndex < 0) || (e.ColumnIndex < 0))
{
return;
}
if(e.ColumnIndex != 1)
{
return;
}
DataGridViewRow dataGridViewRow = this.dataGridView.Rows[e.RowIndex];
DataGridViewCell dataGridViewCell = dataGridViewRow.Cells[e.ColumnIndex];
if(dataGridViewCell is DataGridViewComboBoxCell)
{
dataGridView.CurrentCell = dataGridViewCell;
dataGridView.BeginEdit(true);
DataGridViewComboBoxEditingControl comboboxEdit = (DataGridViewComboBoxEditingControl)this.dataGridView.EditingControl;
if(comboboxEdit != null)
{
comboboxEdit.DroppedDown = true;
}
}
}
#endregion
#region 데이터 그리드 뷰 편집 컨트롤 표시시 처리하기 - dataGridView_EditingControlShowing(sender, e)
/// <summary>
/// 데이터 그리드 뷰 편집 컨트롤 표시시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void dataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
int rowIndex = this.dataGridView.CurrentCell.RowIndex;
string y1Name = this.dataGridView.Rows[rowIndex].Cells[2].Value as string;
string y2Name = this.dataGridView.Rows[rowIndex].Cells[3].Value as string;
ComboBox comboBox = e.Control as ComboBox;
if(comboBox != null)
{
object value = comboBox.SelectedItem;
comboBox.SelectedIndexChanged -= comboBox_SelectedIndexChanged;
comboBox.Items.Clear();
if(y1Name.Length > 0 && y2Name.Length > 0)
{
comboBox.Items.AddRange(new object[] { "Both", "A", "B" });
}
else if(y1Name.Length > 0 && y2Name.Length == 0)
{
comboBox.Items.AddRange(new object[] { "A", "B" });
}
else if(y1Name.Length == 0 && y2Name.Length > 0)
{
comboBox.Items.AddRange(new object[] { "A", "B" });
}
else
{
comboBox.Items.AddRange(new object[] { "Both", "A", "B" });
}
comboBox.SelectedItem = value;
comboBox.SelectedIndexChanged += comboBox_SelectedIndexChanged;
}
}
#endregion
#region 콤보 박스 선택 인덱스 변경시 처리하기 - comboBox_SelectedIndexChanged(sender, e)
/// <summary>
/// 콤보 박스 선택 인덱스 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
this.dataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
this.dataGridView.UpdateCellValue(dataGridView.CurrentCell.ColumnIndex, dataGridView.CurrentCell.RowIndex);
}
catch(Exception exception)
{
MessageBox.Show(exception.ToString());
}
}
#endregion
#region 데이터 그리드 뷰 셀 값 변경시 처리하기 - dataGridView_CellValueChanged(sender, e)
/// <summary>
/// 데이터 그리드 뷰 셀 값 변경시 처리하기
/// </summary>
/// <param name="sender">이벤트 발생자</param>
/// <param name="e">이벤트 인자</param>
private void dataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine("데이터 그리드 뷰 결과");
stringBuilder.AppendLine();
foreach(DataGridViewRow row in dataGridView.Rows)
{
stringBuilder.Append("행" + row.Index + "\t");
foreach(DataGridViewCell cell in row.Cells)
{
if(cell.Value == null)
{
stringBuilder.Append("null\t");
}
else
{
stringBuilder.Append(cell.Value.ToString() + "\t");
}
}
stringBuilder.AppendLine();
}
MessageBox.Show(stringBuilder.ToString());
}
#endregion
//////////////////////////////////////////////////////////////////////////////// Function
#region 컬럼들 초기화 하기 - InitializeColumns()
/// <summary>
/// 컬럼들 초기화 하기
/// </summary>
private void InitializeColumns()
{
this.dataGridView.Columns.Clear();
DataGridViewTextBoxColumn textBoxColumn;
textBoxColumn = new DataGridViewTextBoxColumn();
textBoxColumn.Name = "Title";
textBoxColumn.HeaderText = "제목";
textBoxColumn.DataPropertyName = "Title";
textBoxColumn.ReadOnly = true;
textBoxColumn.Visible = true;
this.dataGridView.Columns.Add(textBoxColumn);
DataGridViewComboBoxColumn comboBoxColumn;
comboBoxColumn = new DataGridViewComboBoxColumn();
comboBoxColumn.Name = "Type";
comboBoxColumn.HeaderText = "타입";
comboBoxColumn.DataPropertyName = "Type";
comboBoxColumn.ReadOnly = false;
comboBoxColumn.Visible = true;
comboBoxColumn.Items.AddRange("Both", "A", "B");
this.dataGridView.Columns.Add(comboBoxColumn);
textBoxColumn = new DataGridViewTextBoxColumn();
textBoxColumn.Name = "Value1";
textBoxColumn.HeaderText = "Value1";
textBoxColumn.DataPropertyName = "Value1";
textBoxColumn.ReadOnly = true;
textBoxColumn.Visible = false;
this.dataGridView.Columns.Add(textBoxColumn);
textBoxColumn = new DataGridViewTextBoxColumn();
textBoxColumn.Name = "Value2";
textBoxColumn.HeaderText = "Value2";
textBoxColumn.DataPropertyName = "Value2";
textBoxColumn.ReadOnly = true;
textBoxColumn.Visible = false;
this.dataGridView.Columns.Add(textBoxColumn);
}
#endregion
}
}
728x90
반응형
그리드형(광고전용)
'C# > WinForm' 카테고리의 다른 글
[C#/WINFORM] ClickOnce 설치 파일 캐시 지우기 (0) | 2018.03.01 |
---|---|
[C#/WINFORM] WIN32 API를 사용해 화면 캡처하기 (0) | 2018.02.18 |
[C#/WINFORM] TextBox 클래스 : 텍스트 필터 사용하기 (0) | 2018.02.18 |
[C#/WINFORM] 카메라 컨트롤 사용하기 (0) | 2018.02.18 |
[C#/WINFORM] DataGridView 클래스 : 달력 컨트롤 컬럼 사용하기 (0) | 2018.02.18 |
[C#/WINFORM] TreeView 클래스 : 동적 노드 생성하기 (0) | 2018.02.18 |
[C#/WINFORM] WPF 사용자 컨트롤 사용하기 (0) | 2018.02.17 |
[C#/WINFORM] DataGridView 클래스 : 컬럼 헤더 병합하기 (0) | 2018.02.17 |
[C#/WINFORM] DataGridView 클래스 : 드래그 & 드롭 사용하기 (0) | 2018.02.17 |
[C#/WINFORM] 파일 드래그 & 드롭 사용하기 (0) | 2018.02.17 |
댓글을 달아 주세요