Bound DropDownList di voci “non utilizzati” più voce riga corrente in EditItemTemplate di GridView?

StackOverflow https://stackoverflow.com/questions/2250395

Domanda

Ho 2 tabelle con ID univoci che possono essere mappati tra di loro (una tabella viene da una base di dati al di fuori della mia domanda, ma ha le informazioni sulle stesse entità che sto monitoraggio). Voglio fornire un'interfaccia utente per il collegamento "miei" record con gli "altri" quelli, in modo da poter memorizzare le "altre" ID nel mio tavolo per i record corrispondenti. In poche parole, l'elemento chiave è un'interfaccia utente DropDownList che mostra la disposizione (cioè, non ancora collegati) record dalla "altro" tabella.

Ho un GridView per la visualizzazione di "miei" record in ogni riga, oltre a una colonna che mostra alcune informazioni da record collegato in "altro" da tavolo, se presente. I dati riguardano gli edifici e le proprietà, quindi potrebbe assomigliare a questo:

Building1   Dallas   TX    Building1_Dallas_TX
Building2   Memphis  TN    Bldg2_Memphis_TN
Building3   Denver   CO
Building4   Seattle  WA
Building5   Boston   MA    Building5_Boston_MA

dove i primi 3 colonne mostrano alcune informazioni dal "mio" tavolo, e l'ultima mostra il record corrispondente dall ' "altro" tavolo, dove i record sono già stati collegati, di un bianco in cui è stato stabilito alcun collegamento. Il mio gridview attuale ha parecchi più colonne di "mio" tavolo, ma questo è sufficiente per illustrare la necessità.

Quando Modifica (non mostrato) viene cliccato per una riga, voglio essere in grado di modificare tutte le 4 colonne. I primi 3 sono textboxes; l'ultima colonna dovrebbe essere una DropDownList che mostra tutte le scollegato i record della "altro" da tavolo, più l'opzione "Non assegnato" (come la prima voce dell'elenco) in modo record possono essere "scollegato" o semplicemente di sinistra non assegnato, più (per le righe che hanno già un collegamento stabilito) l'elemento collegato (è "usata", ma ha bisogno di essere lì in modo che possano continuare a usarlo).

Posso popolare il dropdownlist correttamente nel code-behind in caso RowEditing GridView (tranne per la voce non assegnati, che aggiungo come ListItem in aspx con l'opzione AppendDataBoundItems impostata su true), e posso impostare la corretta SelectedValue evento DataBound del ddl, ma il postback quando clicco per aggiornare la riga, il ddl non ha articoli in esso più (tranne che per la voce non assegnati) in modo che il collegamento è sempre cancellata. Se ho impostato manualmente un collegamento modificando direttamente mio tavolo, tutto sembra bene di entrare in modalità di modifica - il ddl ha gli elementi corretti in esso e preseleziona l'articolo corretto, ma tutto è perduto sul aggiornamento postback. Ho provato a ri-legare il ddl nelle varie fasi del ciclo di pagina, ma chiaramente non ho ben capito che il ciclo abbastanza bene ma perché io non riesco a capire come ottenere l'elemento selezionato dall'utente di aggiornare il mio tavolo.

Ho anche provato il popolamento del ddl con uno SqlDataSource SelectCommand, ma non hanno avuto fortuna incluso l'ID del record attualmente collegati nel altro database (anche se è disponibile nel "mio" tavolo e ho impostato come un GridView DataKey e inserirlo come ControlParameter nelle SelectParameters per la SqlDataSource. senza il record correntemente-linked nella lista oggetto ddl, non riesco a tenere i collegamenti esistenti.

Ti tengo fuori l'invio di un esempio di codice per il momento - questo messaggio è già troppo lungo! -., Nella speranza che la soluzione è evidente da quello che ho descritto ... non credo che il mio obiettivo è strano, ma sono aperto a essere convinto altrimenti

Molte grazie in anticipo!

Chris

È stato utile?

Soluzione

Ok, non sto andando nei dettagli con il codice perché magari hai già fatto quello che sto per suggerire.

Per l'ultima colonna, l'elenco a discesa, è necessario eseguire un'istruzione SQL per afferrare te gli elementi non collegati. Utilizzare il "dove xx NOT IN". Per l'opzione "Non assegnato", basta aggiungere un elemento alla lista nello stesso ambito del codice di cui sopra.

Il passo successivo è quello di gestire gli eventi di modifica di GridView manualmente. Insert, Update e Delete.

Credo in questo modo non avrete problemi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top