Come selezionare una riga all’interno di una cella datagridview?

Cari utenti: ho una vista datagrid che sto usando in un form di Windows con c sharp, questo datagridview ha colonne come segue:

  • nome
  • prezzo
  • dettaglio

Ho pulsanti che imposteranno i valori per ognuna di queste celle, una riga può contenere solo un nome e un prezzo, ma diverse linee di dettaglio, per cui lo scopo è separare ogni voce con una linea ambientale, nel caso in cui la voce sia per i dettagli.

inserisci la descrizione dell'immagine qui

Ok quindi spero che tu abbia l’idea, ora la parte più interessante è che voglio che l’utente sia in grado di fare clic e selezionare uno di questi sottotitoli che si trovano all’interno della riga datagriview per questo object. anche questo datagrid non è vincolato a nessuna tabella. Può essere fatto? grazie a tutti in anticipo

Pubblicando questa risposta perché l’OP lo ha richiesto.

Questo è come lo faresti in WPF:

                    

Codice dietro:

 public partial class ListBoxInCell : Window { public ViewModel ViewModel { get; set; } public ListBoxInCell() { InitializeComponent(); DataContext = ViewModel = new ViewModel(); } private void ShowDetail(object sender, RoutedEventArgs e) { MessageBox.Show(ViewModel.SelectedItem.SelectedDetail); } } 

ViewModel:

 public class ViewModel { public List Items { get; set; } public Data SelectedItem { get; set; } public ViewModel() { //Sample Data Items = Enumerable.Range(0, 100).Select(x => new Data { Product = "Product" + x.ToString(), Details = Enumerable.Range(0, 3) .Select(d => "Detail" + x.ToString() + "-" + d.ToString()) .ToList() }).ToList(); SelectedItem = Items.First(); } } 

Dati:

 public class Data { public string Product { get; set; } public List Details { get; set; } public string SelectedDetail { get; set; } } 

Risultato:

inserisci la descrizione dell'immagine qui

  • MVVM, il che significa che i dati sono separati dall’interfaccia utente e l’interfaccia utente è separata dai dati.
  • Nessun “proprietario draw”, nessun “P / Invoke” (qualunque cosa ciò significhi) e nessun orribile hack procedurale. Solo bello XAML e DataBinding.
  • La selezione di ciascun ListBox all’interno di ogni riga è individuale, potresti voler mantenere solo 1 elemento selezionato impostando tutti gli altri su null con una semplice query LINQ e un’iterazione.
  • fare clic sul pulsante per visualizzare il dettaglio attualmente selezionato per la riga attualmente selezionata in ListView.
  • Rocce WPF, copia e incolla il mio codice in un File -> New Project -> WPF Application e guarda i risultati da solo.
  • Dimentica le vinacce. È inutile. Non supporta alcun livello di personalizzazione e richiede un sacco di hack orribili per tutto. Non supporta il DataBinding (reale) e ti costringe a un approccio procedurale noioso.

DataGridView non supporta le sotto-righe in una riga. Quindi, il mio consiglio è che dovresti usare due DataGridViews:

  • Uno contiene un elenco di nomi e prezzi.
  • Un altro mostra l’elenco delle righe di dettaglio che appartengono alla riga selezionata corrente nel primo DataGridView.