2013-09-27 48 views
6

borykałem się z tym problemem zbyt długo, widziałem wszystkie odpowiedzi na ten temat i choć znalazłem kilka z nich nie wydaje się pracować dla mnie. Tak więc podstawą mojego problemu jest: Mam DataGridView, który doda wiersz do siebie po dwukrotnym kliknięciu na komórkę DataGridView. Kiedy ten DataGridView dostaje dodany wiersz, dodaje do siebie 2 typy kolumn jeden jest ComboBox, który ma już ustaloną kolekcję (po prostu przeszedł do opcji w datagrid i wypełnił swoją kolekcję) oraz pole wyboru kolumna, teraz obaj nic nie robią, gdy ich klikam, doble clic, wielokrotne kliknięcie tylu kliknięć, ile chcesz, ale nic się nie dzieje. Spróbowałem nawet następującego kodu.Upuść Combobox wewnątrz datagridview

public static void combolist(DataGridView combogrid)    
{ 

    var column = new DataGridViewComboBoxColumn(); 

    DataTable data = new DataTable(); 

    data.Columns.Add(new DataColumn("Value", typeof(string))); 
    data.Columns.Add(new DataColumn("Description", typeof(string))); 

    data.Rows.Add("item1"); 
    data.Rows.Add("item2"); 
    data.Rows.Add("item3"); 

    column.DataSource = data; 
    column.ValueMember = "Value"; 
    column.DisplayMember = "Description"; 

    combogrid.Columns.Add(column); 
} 

i chociaż mogę dodać nową kolumnę typu ComboBox do mojego DataGridView nadal jest pusta (lub apears być skoro nie mogę clic zobaczyć rozwijanej listy). moje właściwości gridview w widoku DataGridView są ustawione na:

editMode: editOnEnter, readOnly: false.

Czy coś tu brakuje? dlaczego nie mogę wypełnić lub wyświetlić tego ComboBox?, plz ten problem doprowadza mnie do szału, i wierzę, że jest to najlepsza strona, aby znaleźć odpowiedź. Wcześniej dużo będę apreciować ... dużo.

Ok, więc na pewno trzeba zobaczyć ten problem z innej perspektywy, nawet ive tryed wiązania ComboBox do źródła danych i nadal nic nie robi wyświetlić !, chociaż samo źródło danych zbindowanych do normalnego ComboBox dostaje pożądanego rezultatu

DataGridViewComboBoxCell ComboColumn = (DataGridViewComboBoxCell)(combogrid.Rows[0].Cells[2]); 

ComboColumn.DataSource = class.details.GetData(); 
ComboColumn.DisplayMember = "name"; 

Czy jest jakiś podstawowy krok im brakujący podczas pracy z ComboBox wewnątrz DataGridView?

+0

nie widzę błąd w podanych informacji i nie wiem, coś specjalnego należy rozważyć, ponieważ 'DataGridViewComboBoxCell' jest prawie taka sama jak zwykłego' ComboBox'. Może mógłbyś opublikować cały kod dodawania wierszy/kolumn i innych rzeczy z 'DataGridView' który jest związany z tymi operacjami? – Onsokumaru

+0

thx chory, próbuj i zrób to, – user2793090

Odpowiedz

3

Niektóre myśli:

  1. Przetestowałem kod jak pisał z visual studio 2012 i wykonywanie kodu poprzez kliknięcie na Button mając pustą DataGridView. To zadziałało dla mnie, ponieważ dostałem DataGridComboBoxColumn z ComboBox z trzema pustymi wpisami. I rozszerzony kod jak poniżej i dostał trzy nazwane wpisy:

    data.Columns.Add(new DataColumn("Value", typeof(string))); 
        data.Columns.Add(new DataColumn("Description", typeof(string))); 
    
        data.Rows.Add("item1"); 
        data.Rows[data.Rows.Count - 1].SetField("Value", "value1"); 
        data.Rows[data.Rows.Count - 1].SetField("Description", "description1"); 
        data.Rows.Add("item2"); 
        data.Rows[data.Rows.Count - 1].SetField("Value", "value2"); 
        data.Rows[data.Rows.Count - 1].SetField("Description", "description2"); 
        data.Rows.Add("item3"); 
        data.Rows[data.Rows.Count - 1].SetField("Value", "value3"); 
        data.Rows[data.Rows.Count - 1].SetField("Description", "description3"); 
    
        column.DataSource = data; 
    

    Wydaje się, że kod po prostu dodaje wiersz o nazwie „ITEM1/2/3” lub wiersz, który właśnie dostał pierwszą kolumnę („Value”, który nie jest twoją wartością wyświetlaną) wypełnioną podaną wartością do datatable bez żadnych wartości, które mogłyby być wyświetlane. W końcu nie mogłem odtworzyć twojego problemu z niemożnością otwarcia listy rozwijanej (zauważ, że użyłem pustego DataGridView, ponieważ nie wiem, co jeszcze masz w swoim DataGridView).

  2. Nie wiem, czy opublikowany kod jest dokładnie tym kodem, z którym masz problemy.Ale piszesz, że dodajesz wiersz do swojego DataGridView, gdy kliknięta jest komórka, a kiedy to się stanie, dodasz dwie kolumny. Czy masz na myśli, że dodajesz do każdego dodanego wiersza dwie kolumny do siatki, czy masz na myśli, że wiersz składa się z dwóch kolumn?
    Jeśli ostatnia ma rację, wydaje mi się, że jest to podobny problem, jak w przypadku opublikowanego kodu. Czy uważasz, że chcesz utworzyć wiersz ręcznie, dodając DataGridViewComboBoxCell i DataGridViewCheckboxCell? Mamy ciche, skomplikowane DataGridViewUserControl, w którym dynamicznie dodajemy różne typy komórek i nie mamy problemów z prawidłowym wyświetlaniem ich. Ale tworzymy wszystkie wiersze ręcznie, wypełniając pożądane typy komórek ręcznie w wierszach i nie określając typu dla kolumny.

+0

Przepraszam, zdaje się, że jestem zdezorientowany z moją eksploracją. O to chodzi, datagrid2 jest pustym datagridem, który dostaje wiersz dodany do niego z 2 kolumnami po wywołaniu zdarzenia cellclick na datagrid1, wiersze z typami kolumn są widoczne, ale nie znaleziono żadnych kolejek kolumna combobox (kolumna1), a także nic się nie dzieje po kliknięciu przycisku checkbox column2. Domyślam się, że najlepszym sposobem będzie dodanie wszystkich kolumn programatycznie, ale nie jestem do końca pewien, dlaczego mam ten problem, thx na ur odpowiedź na pytanie – user2793090

1

To dlatego, że Twoja DataTable ma 2 columns. Ale dodajesz tylko wartości dla komórek w kolumnie 1, komórki w kolumnie 2 (które będą używane jako DisplayMember twojego comboBox) mają puste wartości. Spróbuj to zamiast:

//..... 
data.Rows.Add("item1","This is Item1"); 
data.Rows.Add("item2","This is Item2"); 
data.Rows.Add("item3","This is Item3"); 
//..... 
+0

, a ja szukam odpowiedzi, ale nawet zmieniając to nie ma różnicy, myślę, że problem pojawia się w tym, że combo wydaje się nie reagować na żadne zdarzenie clic jakie popełniam lub cokolwiek innego, ale nie rozumiem, dlaczego to zdarzyłoby się – user2793090

+0

@ user2793090 przepraszam, ** testowałem to ** –

+0

musi być coś im ustawianie źle w moim datagrid wtedy, jakaś własność, ponieważ zrobiłem zmiany u sugest i wciąż dostaję ten sam wynik ... jakiekolwiek myśli? – user2793090

2

Dodaje 2 kolumny do datatable i wypełnia tylko członek wartości. Spróbuj tego

 var column = new DataGridViewComboBoxColumn(); 

     DataTable data = new DataTable(); 

     data.Columns.Add(new DataColumn("Value", typeof(string))); 
     data.Columns.Add(new DataColumn("Description", typeof(string))); 

     data.Rows.Add("item1","123"); 
     data.Rows.Add("item2","234"); 
     data.Rows.Add("item3","245"); 

     column.DataSource = data; 
     column.ValueMember = "Value"; 
     column.DisplayMember = "Description"; 

     dataGridView1.Columns.Add(column); 
+0

thx za odpowiedź ur, ale nadal otrzymuję ten sam wynik, nawet z tymi modyfikacjami – user2793090