Imposta un datalist.datasource dall'interno di un controllo utente - asp.net c #
-
06-07-2019 - |
Domanda
Ho un controllo utente che contiene un datalist e voglio impostare l'origine dati del datalist su cose diverse a seconda della pagina in cui si trova il controllo utenti.
Quindi, penso che ciò che devo fare è esporre una proprietà pubblica del datalist che otterrà l'origine dati e la imposterà, in questo modo:
public datasource UserDataSource
{
get { return DataList1.DataSource; }
set { DataList1.DataSource = value; }
}
ma ovviamente sopra non funziona. Lo chiamerei così:
MyUserControl.UserDataSource = datasourcename;
e quindi in qualche modo database il datalist all'interno del controllo utente.
Ovviamente sono un po 'fuori dal mio elemento qui, ma spero di riuscire a farlo funzionare. Grazie per l'aiuto.
Soluzione
Devi trovare il metodo di controllo find per trovare prima il tuo datalist e quindi assegnare l'origine dati come ...
DataList dl = (DataList)yourLoadedusercontrol.FindControl("yourDatalist");
dl.DataSource = yourdatasource;
Altri suggerimenti
So che hai già accettato una risposta, ma sento di dover aggiungere i miei pensieri:
L'idea originale era corretta: era sufficiente chiamare il metodo databind del datalist dopo aver impostato l'origine dati. Non credo davvero che il metodo sopra descritto sia il metodo migliore. Dovresti proprio avere un metodo o una proprietà writeonly (come fai tu) che prende un possibile IList o IEnumerable del tuo oggetto personalizzato e lo lega direttamente al tuo datalist. La tua pagina o controllo che contiene questo controllo utente non dovrebbe essere a conoscenza del tuo tipo di controllo dei dati. Se lo cambi da un Datalist a un Repeater o a GridView, devi cambiarlo ovunque ti leghi al controllo dell'utente.
Esempio:
IList<CustomClass> results = new List<CustomClass>(); //you would load your collection from your database
this.myUserControl.LoadData(results);
Nel tuo controllo utente:
public void LoadData(IList<CustomClass> data){
this.datalist1.datasource = data;
this.datalist1.databind();
}