[C#] DGV + Binding Source + ComboBoxColumn + DataSource

0

Cześć.

Mam takie pytanko, może ktoś będize wiedzieć.

Mam DataGrid view dgv, do którego binduje tabelę z bazy danych. Wyświetla się wszystko ok, ale chciałbym, aby pewne kolumny zamiast wyświetlania intów, wyświetlały tekst. Mam np. tabelę książki i chciałbym, w kolomnie "typ" wyświetlało się np. "science-fiction", a nie id typu (np. 1). Drugą rzeczą, to możliwość zmiany typu. Chciałbym niedopuścić możliwości, aby wpisano zły typ książki, oraz żeby nie wpisywać intów, tylko wybrać z możliwości prezentowanych w comboBoxie.

Teraz, jak to zrobic, żeby podpinając pod dgv binding source, część kolumn wyświetliła się jako comboBoxColumns i podpiąć tabelę pod te kolumny?

0

do kolumny combo box musisz dobindowac (np datatable) z opisem ID,Nazw

0

A w jaki sposób ustawić kolumny jako comboBox?
Usunąć autogenerowanie kolumn i dodać "z palca"?

0

tzn, mam coś takiego:

[code]
bonusBS = new BindingSource();
bonusBS .DataSource = new DataView(aaco.Tables["audits"]);
bonusBS .Filter = "isCheckerAccepted = false AND isClosed = false AND (type = 2 OR type = 3 OR type = 4)";
dgv_bonus.DataSource = bonusBS ;
RemoveColumnsFromAudits(dgv_bonus);
[/code]

Teraz, chciałbym, aby mój dgv_bonus posiadał kilka kolumn jako combobox i podpiąć pod to dane.

Z tego co się orientuje, jest możliwość bindowania column jest wtedy, gdy dgv.DataSource = dataSet.DefaultViewManager, zaś dgv.DataMember = "set.tabela";
Wtedy podpięcie bindowanie comboBoxów wygląda w taki sposób: dgv.Columns["mojakolumna"].DataPropertyName = "string";

tylko, że Binding Source pozwala bindować tylko datatable, więc nie za bardzo wiem, jak to zrobić.

Inna sprawa, to to, czy można zrobić dokładnie to samo, ale z TextBoxCell? Tzn, przy normalnym databindzie pojawia się id (bo tak jest w bazie). Fajnie by było, gdyby dgv wyświetlało zamiast id, nazwę, tkóą brałby z innej tabeli. Tylko, w jaki sposób można to osiągnąć używając binding source'a?

Czy może używając jako dgv.DataSource = dataSet.DefaultViewManager osiągnę ten sam efekt, czyli automatyczne updatetowanie tabel przy zmianie DGV (i vice versa) i nałożenie filtra na wyświetlane danych?

Z góry dzięki za pomoc.

0

z auto generowaniem ciezko. Trzeba sobie ustawic aby byla to kolumna commbobox. dataTable mozna stworzyc (Rows.Add tec ... sa tutoriale chyba nawet na MSDN). W textboxie to nie wiem, ewentualnie mozna stworzyc sobie wlasna kolumna z taka opcja na bazie tekst boxa (tez miliony tutoriali w sieci).

np.
http://msdn2.microsoft.com/en-us/library/ms171618.aspx

0

wiem jak się tworzy i ręcznie binduje to wszystko, ale zastanawiałem sie, czy nie ma prostrzego sposobu by nie nadpisywać tego, co już jest zrobione i działa dobrze.

Z textBoxem się uporałem w miare łatwo (tworząc nowy typ dziedziczący po textBoxCell), ale z comboBoxem jest problem.

0

Jakos tego nie widze. Trzeba dodac do comboboxa opis. Nie mozna przed bo nie ma kolumn. Zatem datagridiew musialby wiedziec, ze kolumna jest powiazana z czyms jeszcze (klucz obcy) i na tej podstawie wygenerowac kolumne z comboboxem (watpie czy jest toto na tyle sprytne).

Mozna by po wygenerowaniu podmienic kolumne, skasowac jedna a dodac druga (to taka luzna idea)
no nie taka luzna
http://www.vb-tips.com/DataGridViewCombo.aspx

aczkolwiek bardziej optymalne jest ustawienie autogenerowania na false.

1 użytkowników online, w tym zalogowanych: 0, gości: 1