Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > отображение данных из базы в Combobox


Автор: Abr 24.1.2006, 13:56
Есть такая проблемка, пишу:
Код

       this.dataAd = new SqlDataAdapter(select, con);
       this.dset = new DataSet();
       this.dataAd.Fill(dset, "allProd");
       this.MydataGridView.DataSource = dset.Tables["allProd"];
       this.Mycombobox.DataSource = dset.Tables["allProd"];
        this.Mycombobox.DisplayMember = "t_name";

где select - строка в которой запрос,
t_name - имя столбца данные которого нужно отобразить в Mycombobox.
Но вместо имен выдает: System.Data.DataRowView

Автор: mr.DUDA 24.1.2006, 21:58
DisplayMember определяет имя столбца таблицы, из которого будут заполняться строки combobox; но кроме этого, необходимо задать ещё и Mycombobox.ValueMember - имя столбца таблицы, определяющего числовые значения, соответствующие каждому DisplayMember-у.

Автор: Abr 25.1.2006, 18:07
а можно чуть подробней про ValueMember.
я пытался задать Mycombobox.ValueMember="id_t" , но выдает ошибку Cannot bind to the new display member.
у меня другой комбобокс настроен на другую выборку, так там все отлично работает без ValueMember,
правда там выбирается один столбец, а в моем примере select возвращает несколько столбцов.

Автор: alexgorbach 8.11.2013, 13:44
Что ж, подниму древнюю тему, но вроде как раз по моей проблеме. Если кто подскажет - буду очень признателен.
Дело происходит на C# + MS SQL Server 2008.
Ситуация такая: есть главная форме с DataGridView(DGV) и множеством BindingSource(BS). DataSource у DGV меняется на соответствующий BS в зависимости от выбранной для отображения таблицы. Для удобства мои BS привязаны не к таблицам, а к представлениям, дабы отображались не коды из родительских таблиц, а соответствующие осмысленные поля.
Существует также форме детализации, которая должна отображать выбранную запись и давать возможность ее отредактировать. В ее конструктор я передаю DataRow - текущую запись из BS. В этой форме хочу наделать TextBox-ов и ComboBox-ов, прибинденых к моему DataRow. Заполняю ComboBox значениями родительской таблицы, пытаюсь сделать привязку... И тут проблема - DGV после смены значения в ComboBox отображает поле как System.Data.DataRowView.
Как привязать Combobox к таблице понятно - выставить ValueMember на соответствующий код, а к представлению как? В нем у меня нет кодов, только поля, соответствующие кодам. Вот код:
Код

//вызов формы детализации по клику кнопкив главной форме
private void btnDetails_Click(object sender, EventArgs e)
        {
            new DetailForm((currentBindingSource.Current as DataRowView).Row, currentTable).ShowDialog();
            dgvView.Refresh();
        }

//конструктор формы детализации
public DetailForm(DataRow dataRow, Tables table)
        {
            InitializeComponent();
            this.table = table;
            ComboBox cb = new ComboBox();
            cb.DataSource = libraryDataSet.Tables["Читатели"];
            //cb.ValueMember = "Код";                                         ЗДЕСЬ КАК БЫТЬ?
            cb.DisplayMember = "Фамилия";
            cb.DropDownStyle = ComboBoxStyle.DropDownList;
            cb.DataBindings.Add("SelectedItem", dataRow, "Читатель");
            tlp.Controls.Add(cb, 1, 1);
        }


Автор: jonie 9.11.2013, 14:09
Цитата(alexgorbach @  8.11.2013,  14:44 Найти цитируемый пост)
Для удобства мои BS привязаны не к таблицам, а к представлениям, дабы отображались не коды из родительских таблиц, а соответствующие осмысленные поля.

представляния это я так понимаю вьюхи в базе... Никто не мешает добавить в них колонку с идентификаторами нужными и указывать как ValueMember их

Автор: alexgorbach 10.11.2013, 01:00
Цитата(jonie @  9.11.2013,  14:09 Найти цитируемый пост)
представляния это я так понимаю вьюхи в базе... Никто не мешает добавить в них колонку с идентификаторами нужными и указывать как ValueMember их 


Точно, как я не догадался, спасибо. Да, представления - это вью. К кодам комбобоксы биндятся нормально, закрываю форму редактирования - и код в DataGridView обновляется, как и положено. Только вот незадача - связанное с этим кодом осмысленное поле-то не меняется.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)