我有一个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应该出现在文本框中(说明将显示在相邻的只读列中,而I也能正常工作)。
我希望找到一种解决方案,仅涉及更改网格中DataGridViewComboBoxColumn对象的一些属性,尽管我担心答案会更多地是创建DataGridViewComboBoxColumn子类并进行一堆重载(ugh)...
最佳答案
这似乎可行:
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 ); }
}
}
}
关于c# - 如何在DataGridViewComboBoxColumn下拉列表中显示与文本框中不同的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3159710/