2010-07-01 4 views
2

나는 내가 많은이 질문에 무슨 일이 일어나고 있는지처럼 선택과 다른 값을 표시하는데있어 DataGridViewComboBoxColumn이 : 내 경우텍스트 상자보다 DataGridViewComboBoxColumn 드롭 목록에 다른 값을 표시하는 방법은 무엇입니까?

DataGridViewComboBoxColumn name/value how?

을, 내가 가진 장비의 목록을 표시하고 있습니다 ID 및 설명. 그래서 내 바인딩 된 데이터 클래스는 다음과 같습니다

public class AURecord 
{ 
    // member vars and constructors omitted for brevity 
    public string ID { get { return _id; } } 
    public string Description { get { return _description; } } 
    public string FullDescription 
    { 
     get { return string.Format("{0} - {1}", _id, _description); } 
    } 
} 

그래서 나는 DisplayMember 및 ValueMember가 각각 FullDescription와 ID를로 설정해야합니다. 여태까지는 그런대로 잘됐다.

문제는 드롭 목록에 FullDescription이 표시되도록 요구하지만 이 선택되면 ID는 텍스트 상자에 표시되어야합니다 (설명은 인접한 읽기에 표시되어야 함) - 단 하나의 칼럼, 나는 잘 작동한다.)

DataGridViewComboBoxColumn 하위 클래스를 만들고 더 많은 오버로드를 수행하는 것에 대한 답변이 많아 지겠지만 그리드의 DataGridViewComboBoxColumn 개체에서 일부 속성 만 변경하면됩니다. ...

답변

2

이 작동하는 것 같다 :

namespace WindowsFormsApplication2 
{ 
    using System; 
    using System.Windows.Forms; 

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

      _grid.CellFormatting += new DataGridViewCellFormattingEventHandler(OnGridCellFormatting); 

      Column1.DisplayMember = "FullDescription"; 
      Column1.ValueMember = "ID"; 
      Column1.Items.Add(new AURecord("1", "First Item")); 
      Column1.Items.Add(new AURecord("2", "Second Item")); 
     } 

     void OnGridCellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
     { 
      if ((e.ColumnIndex == Column1.Index) && (e.RowIndex >= 0) && (null != e.Value)) 
      { 
       e.Value = _grid.Rows[ e.RowIndex ].Cells[ e.ColumnIndex ].Value; 
      } 
     } 
    } 

    public class AURecord 
    { 
     public AURecord(string id, string description) 
     { 
      this.ID = id; 
      this.Description = description; 
     } 
     public string ID { get; private set; } 
     public string Description { get; private set; } 
     public string FullDescription 
     { 
      get { return string.Format("{0} - {1}", this.ID, this.Description); } 
     } 
    } 
} 
+0

꽤 잘 작동하도록 나타납니다. 선택하는 동안과 직후에 이상한 행동을합니다. (드롭 목록이 열리는 동안 셀에 전체 ID와 설명이 나타납니다.) 일단 포커스가 그리드 셀을 떠나면 우리가 원하는 것을 수행합니다. 우리가 이상하게 살아갈 수 있는지 확인하기 위해 QA에서 수신 거부하고 있습니다.하지만 괜찮을 것 같습니다. 감사. –

관련 문제