2013-09-27 11 views
6

ive da troppo tempo a questo problema, ho visto tutte le risposte sull'argomento e sebbene abbia trovato diversi nessuno di loro sembra funzionare per me. Quindi la base del mio problema è la seguente: ho un DataGridView che aggiungerà una riga a se stesso una volta che un'altra cella DataGridView viene cliccata due volte. Quando questo DataGridView ottiene la riga aggiunta, aggiunge 2 tipi di colonne a se stesso uno è un ComboBox, che dispone di una raccolta già presente in esso (è appena passato alle opzioni ComboBox all'interno del datagrid e ha riempito la sua raccolta) e una casella di controllo colonna, ora entrambi non fanno nulla una volta che clicco su di loro, doppio clic, più clic su quanti clic vuoi, ma non succede nulla. Ho persino provato il seguente codice.Scorri il Combobox all'interno di 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); 
} 

e anche se posso aggiungere una nuova colonna del tipo ComboBox al mio DataGridView è ancora vuota (o apears di essere in quanto i cant clic per visualizzare un elenco a discesa). i miei dati DataGridView proprietà gridview sono impostati su:

editMode: editOnEnter, readOnly: false.

C'è qualcosa che mi manca qui? perché non riesco a popolare o visualizzare questo ComboBox?, perché questo problema mi sta facendo impazzire, e credo che questo sia il sito migliore per trovare una risposta. Lo apprezzerei molto ... molto.

Ok quindi ho sicuramente bisogno di vedere il problema da un'altra prospettiva, ive anche tryed impegnare la ComboBox a un'origine dati ed ancora doesnt visualizza nulla !, anche se la stessa origine dati rilegato ad una normale ComboBox ottiene il risultato desiderato

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

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

c'è qualche passaggio di base im mancante quando si lavora con ComboBox all'interno di DataGridView?

+0

non vedo un errore nelle informazioni fornite e non so qualcosa di speciale che si dovrebbe prendere in considerazione dal momento che il 'DataGridViewComboBoxCell' è quasi la stessa di un normale' ComboBox'. Forse potresti postare l'intero codice per aggiungere le righe/colonne e l'altra roba di 'DataGridView' che è correlata a queste operazioni? – Onsokumaru

+0

mi sforzo e lo faccio – user2793090

risposta

3

Alcune riflessioni:

  1. Ho provato il codice come inviato con Visual Studio 2012 e l'esecuzione del codice facendo clic su un Button avere un vuoto DataGridView. Ha funzionato per me, perché ho ottenuto un DataGridComboBoxColumn con uno ComboBox con tre voci vuote. Ho esteso il codice come qui sotto e ottenuto tre voci di nome:

    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; 
    

    Sembra che il codice aggiunge solo una riga denominata "Item1/2/3" o una riga che appena ricevuto la prima colonna ("Valore", che non è il tuo valore di visualizzazione) riempito con il valore dato al datatable che non ha valori che potrebbero essere visualizzati. Alla fine non ho potuto riprodurre il tuo problema di non essere in grado di aprire il menu a discesa (nota che ho usato uno DataGridView vuoto perché non so cos'altro hai nel tuo DataGridView).

  2. Non so se il codice inviato sia esattamente il codice in cui si hanno problemi.Ma scrivi che aggiungi una riga al tuo DataGridView quando si fa clic su una cella e che quando ciò accade aggiungi due colonne. Vuoi dire che aggiungi per ogni colonna aggiunta due colonne alla griglia o intendi semplicemente che la riga è composta da queste due colonne?
    Se l'ultimo è corretto, mi sembra un problema simile al codice pubblicato. Hai considerato di creare manualmente la riga aggiungendo uno DataGridViewComboBoxCell e DataGridViewCheckboxCell? Abbiamo un complicatissimo DataGridViewUserControl in cui aggiungiamo dinamicamente diversi tipi di celle e non abbiamo problemi a visualizzarli correttamente. Ma creiamo tutte le righe manualmente, riempiendo manualmente i tipi di celle desiderati nelle righe e non specificando un tipo per una colonna.

+0

Mi dispiace per averti confuso con la mia esplosione. Ecco la cosa, il datagrid2 è un datagrid vuoto che ottiene una riga aggiunta ad esso con 2 colonne una volta che l'evento cellclick su datagrid1 viene attivato, le righe con i tipi di colonna appaiono per essere aggiunte nel modo corretto ma non vengono trovate raccolte colonna combobox (colonna1) e inoltre non accade nulla quando si fa clic sul pulsante della casella di controllo column2. Immagino che il modo migliore sia di aggiungere tutte le colonne in modo programmatico ma non sono abbastanza sicuro del perché ho questo problema, grazie per la tua risposta – user2793090

1

È perché il tuo DataTable ha 2 columns. Ma si aggiungono solo i valori per le celle nella colonna 1, le celle nella colonna 2 (che verrà utilizzata come DisplayMember del proprio comboBox) hanno valori vuoti. Prova a modificare:

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

io apprezzo la tua risposta ma anche cambiando questo non c'è alcuna differenza, penso che il problema si ripresenti nel fatto che la combo sembra non rispondere a nessun evento clic che faccio o qualsiasi cosa ancora non capisco perché questo sarebbe accaduto – user2793090

+0

@ user2793090 scusate, ** l'ho provato ** –

+0

ci deve essere qualcosa di im impostazione sbagliata nel mio datagrid quindi, alcune proprietà, perché ho apportato le modifiche sugest e ho ancora lo stesso risultato ... qualche pensiero? – user2793090

2

Si aggiungono 2 colonne al datatable e si riempie solo il membro del valore. Prova questo

 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

per la tua risposta, ma ottengo lo stesso risultato anche con queste modifiche – user2793090