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