2009-09-07 2 views
6

나는 이것이 Access 에서처럼 단순하다고 생각했습니다.DataGridViewComboBoxColumn 이름/값 방법은 무엇입니까?

사용자는 1

2. 내가 콤보 상자를 보여주는 "ONE"을 제시하고 싶었 중 하나에 데이터 테이블에 하나 개의 컬럼의 값을 설정하기 위해 "2"를 필요로하고 같은 장면 뒤에 1 또는 2를 설정 나는 Access-Forms에서 많은 시간을 보냈다.

표가 표시된 경우에는 1 또는 2가 아닌 ComboBox에 해당 문자열이 표시됩니다.

이 간단한 작업을 어떻게 수행 할 수 있습니까 ??

답변

12

Windows Forms 용인 DataGridView를 의미하는 것으로 가정하고, GridView는 ASP.NET 용이므로 사용자가 그러한 질문을 태그로 지정했습니다.

DataGridViewComboBoxColumn에 데이터를 바인딩하는 방법은 무엇입니까? DataSource를 설정하는 동안 DataGridViewComboBoxColumn에서 DisplayMember 및 ValueMember 속성을 설정해야합니다. DisplayMember에 대한 MSDN 링크는 예를 보여 주지만 두 속성을 같은 것으로 설정 했으므로 요청한 내용을 표시하지 않습니다.

DisplayMember는 사용자에게 표시 할 텍스트이고 ValueMember는 숨겨진 기본 값입니다. 선택 사항을 포함하는 목록을 반환합니다)

public class Choice 
{ 
    public string Name { get; private set; } 
    public int Value { get; private set; } 
    public Choice(string name, int value) 
    { 
     Name = name; 
     Value = value; 
    } 

    private static readonly List<Choice> possibleChoices = new List<Choice> 
    { 
     { new Choice("One", 1) }, 
     { new Choice("Two", 2) } 
    }; 

    public static List<Choice> GetChoices() 
    { 
     return possibleChoices; 
    } 
} 

GetChoices을 (: 예를 위해서

,의 당신이 당신의 선택을 나타내며 다음과 같습니다 프로젝트의 선택 클래스가 있다고 가정 해 보자. 이상적으로는 서비스 레이어에서 이러한 메소드를 사용하거나, 원하는 경우 양식의 코드 뒤에 다른 곳에서 자신 만의 목록을 작성할 수 있습니다. 단순함을 위해 나는 같은 수업에서 모두 함께 일괄 처리했습니다. 다음과 같이 양식에

당신은 DataGridViewComboBoxColumn에 목록을 결합하는 것입니다 :

// reference the combobox column 
DataGridViewComboBoxColumn cboBoxColumn = (DataGridViewComboBoxColumn)dataGridView1.Columns[0]; 
cboBoxColumn.DataSource = Choice.GetChoices(); 
cboBoxColumn.DisplayMember = "Name"; // the Name property in Choice class 
cboBoxColumn.ValueMember = "Value"; // ditto for the Value property 

이제 콤보에서의 "1"과 "2"를 참조한다. 선택한 값을 가져 오면 기본 1 또는 2 값이어야합니다.

DisplayMember/ValueMember를 사용하는 것이 좋습니다. 이렇게하면 사용하고있는 데이터 소스를 조정하는 데 도움이됩니다.

+0

! 감사합니다! Reinhard –

+2

DataGrid에서 드롭 다운 셀의 선택된 값을 어떻게 읽을 수 있습니까? – Meysam

+0

그게 단순한 줄을 몰랐습니다! 감사 – Jack

3

이는 그리드에서 값을 읽는 방법을 때 콤보 상자의 값이 변경 :

dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing; 

private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) 
{ 
    if (dataGridView1.CurrentCell.ColumnIndex == 0 && e.Control is ComboBox) 
    { 
     ComboBox comboBox = e.Control as ComboBox; 
     comboBox.SelectedIndexChanged += LastColumnComboSelectionChanged; 
    } 
} 

private void LastColumnComboSelectionChanged(object sender, EventArgs e) 
{ 
    var sendingCB = sender as DataGridViewComboBoxEditingControl; 
    object value = sendingCB.SelectedValue; 
    if (value != null) 
    { 
     int intValue = (int)sendingCB.SelectedValue; 
     //do something with value 
    } 
} 

소스 : this post이 완벽한 해답입니다

관련 문제