如何在DataGridViewComboBoxColumn下拉列表中显示不同于文本框中的值?

问题描述:

我在那里,我应该比被选择来显示不同的值,就像在这个问题上是怎么回事一个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子类和做一堆重载(唉) ...

这似乎工作:

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加描述出现在单元格中,并且在下拉列表打开后立即出现),但是一旦焦点离开网格单元格,它就会启动并执行我们想要的操作。我将它从我们的质量检查中反弹出来,看看我们是否能忍受这种奇怪现象,但我怀疑它会好起来的。谢谢。 – 2010-07-15 19:57:26