Как можно отобразить другие значения в раскрывающемся списке DataGridViewComboBoxColumn, чем в текстовом поле? - PullRequest
2 голосов
/ 01 июля 2010

У меня есть DataGridViewComboBoxColumn, где я должен отображать значения, отличные от выбранных, очень похоже на то, что происходит в этом вопросе:

DataGridViewComboBoxColumn имя / значение как?

В моем случае я отображаю списки оборудования, которые имеют идентификатор и описание. Итак, мой связанный класс данных выглядит так:

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 отображалось в раскрывающемся списке, но после выбора в текстовом поле должен отображаться только идентификатор (описание должно отображаться в соседний столбец только для чтения, и у меня это тоже работает).

Я надеюсь на решение, которое включает в себя только изменение некоторых свойств объекта DataGridViewComboBoxColumn в моей сетке, хотя я боюсь, что ответ будет больше похож на создание подкласса DataGridViewComboBoxColumn и выполнение множества перегрузок (тьфу). ..

1 Ответ

2 голосов
/ 14 июля 2010

Это похоже на работу:

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 ); }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...