2012-11-16 21 views
9

Jak uzyskać element wybrany przez Combobox tekst, który znajduje się w DataGridView? Próbowałem przy użyciu kodu poniżej:Jak uzyskać TEKST elementu wybranego przez Combatup?

dataGridView1.Rows[1].Cells[1].Value.ToString() 

Ale to daje wartość związaną z tą komórką, a nie combobox zaznaczony element tekstu. Próbowałem to również:

DataGridViewComboBoxCell cell = dataGridView1[1,1] as DataGridViewComboBoxCell; 
string value = cell.Value.ToString(); 

Ale to też nie pomogło.

Byłbym wdzięczny za pomoc. Z góry dziękuję!

EDIT:

Powiedzmy mamy combobox z tekstem jako No i Yes i wartości jako 0 i 1, odpowiednio. To, co chcę uzyskać, to tekst Yes lub No, gdy zmieni się Combobox. Ale otrzymuję wartości 0/1 przy użyciu powyższych kodów. Nadzieja, która wyjaśnia.

UPDATE:

Ok, więc pracuję w tej sprawie i po wielu staraniach i dzięki pomocy moich kolegów członków, udało mi się rozwiązać ten problem i uzyskać wymaganą rozwiązanie:

Oto rozwiązanie:

string SelectedText = Convert.ToString(dataGridView1.Rows[0].Cells[1].FormattedValue.ToString()); 
+0

Sprawdź to [** 'Link' **] (http://stackoverflow.com/a/6051032/1577396) i odpowiedz mi .. –

+0

Jak powiedział @Mr_Green - nie jest jasne, czego szukasz. Czy możesz edytować pytanie, aby powiedzieć, jakie są Twoje oczekiwane i rzeczywiste wyniki? – Bobson

Odpowiedz

15

Aby wybrana wartość i wybrany tekst Combobox w DataGridView spróbować następujący kod

string SelectedText = Convert.ToString((DataGridView1.Rows[0].Cells["dgcombocell"] as DataGridViewComboBoxCell).FormattedValue.ToString()); 
int SelectedVal = Convert.ToInt32(DataGridView1.Rows[0].Cells["dgcombocell"].Value); 
+0

Nie sądzę, że faktycznie musisz 'Convert.ToString()' w pierwszym przypadku, ponieważ nazywasz '.ToString()' na FormattedValue. Bardzo przydatne. – Bobson

+0

@Bobson Convert.ToString() obsługuje wartość pustą i jeśli piszę tylko .Tostring() i jest wartość pusta, spowoduje to wyjątek w czasie wykonywania. :) –

+1

To naprawdę dobry punkt. Ale czy to oznacza, że ​​'.ToString()' jest zbędnym bitem? – Bobson

-1

można spróbować w ten sposób: -

dataGridView1.CurrentRow.Cells[0].Value.ToString(); 

Indeksuj kolumnę komórki, na którą należy patrzeć, w zależności od tego, który z indeksów jest twój ComboBoxColumn.

+0

To nie zapewnia niczego innego niż to, co ma OP - może już uzyskać prawidłową wartość 'komórki'. – Bobson

+0

Tak @Bobson masz absolutną rację. Otrzymuję już prawidłową wartość komórki. Po prostu potrzebuję uzyskać "wybrany tekst combobox". –

2

udało mi się wyciągnąć to ciąg wartości z komórki w ten sposób:

DataGridViewComboBoxCell dgvcmbcell = dataGridView1[1, 0] as DataGridViewComboBoxCell; 
String text = dgvcmbcell.EditedFormattedValue.ToString(); 

Najprostszym sposobem, aby dowiedzieć się tego jest używać debuggera i spojrzeć w obiekcie dgvcmdcell. W tym znajdziesz rozwinięty węzeł "base". Rozwiń go i po prostu przejrzyj, a znajdziesz tam wszelkie potrzebne informacje.

+0

Dzięki @Wozzec za odpowiedź, ale rozwiązanie nie działa tak jak chciałem. Mam TAK i NIE jako TEKST w combobox. Udało mi się uzyskać TEKST "Tak", ale gdy zmieniłem wartość combobox na "Nie", to wciąż pokazywał wartość jako "Tak", gdzie powinno być "Nie" jako wybrany element TEKST. Mam nadzieję, że dostałeś tutaj mój problem. –

+0

Jak dodać swoje przedmioty do combobox? Stworzyłem klasę zawierającą tekst i wartość zmiennych. Następnie ustawiam kolumnę combobox, aby użyć źródła powiązań z listą klasy textvalue jako źródła. Dla mnie otrzymuję TEKST "NIE", gdy zmieniłem element combobox. – WozzeC

+0

Dodaję dynamicznie kolumnę combobox do siatki i ładuję dane w DataTable jako listę itmes. –

0

Aby uzyskać dostęp do aktualnie zaznaczonego tekstu w DataGridView, trzeba odniesienie do CurrencyManager kolumny combobox. CurrencyManager nie ma nic wspólnego z pieniędzmi, ale zarządza powiązaniem między kolumną a jej źródłem danych. CurrencyManager może ci powiedzieć, jaki jest wybór comboboxa.

kody Teh:

CurrencyManager cm = (CurrencyManager)DataGridView1.BindingContext[((System.Windows.Forms.DataGridViewComboBoxColumn)DataGridView1.Columns[0]).DataSource]; 

. Uwaga: nie jest konieczne, aby rzucić kolumnę combobox, po prostu zrobił to, aby pokazać, co kolumna I został przechodzącą w użyłem indeks 0 ale użyj dowolnego indeksu, który jest faktycznym indeksem Twojej kolumny combobox.

Teraz za pomocą menedżera walut można uzyskać dostęp do bieżącego wyboru datagridu dla tej kolumny (ponieważ była to kolumna, która została przekazana).

cm.Current; //returns the current selection whatever that is 

Więc w moim przypadku źródła danych kolumny combobox była klasa o nazwie Wybór, wybór wygląda następująco:

public class Choice 
    { 
      public string Text 
      { 
       get; 
       set; 
      } 
    } 

Kiedy dostępu do właściwości cm.Current zwróci instancję klasa wyboru, mogę teraz uzyskać dostęp do właściwości wybranej klasy, aby zobaczyć, jaka wartość została wybrana. Będziesz oczywiście musiał dostosować to do swojej konkretnej sytuacji. Mam nadzieję, że to pomoże.

Powiązane problemy