Colonna di BindingSource con Anonymous classe come DataSource
-
20-09-2019 - |
Domanda
Esiste un metodo per selezionare una colonna della riga corrente di un BindingSource cui DataSource è una classe anonima?
var userResults = from u in dataContext.Users
join c in dataContext.Computers on u.ID equals c.UserID
where doSearch
&& u.Name.Contains(userNameTextBox.Text)
&& u.UserName.Contains(userUsernameTextBox.Text)
select new { u.Name, u.UserName, u.Branch, c.Installations, u.ID };
userBindingSource.DataSource = userResults;
Voglio ottenere il valore corrente di u.ID
.
Soluzione
Il problema qui è che elementi nel BindingSource sono di tipo Object e avete bisogno di convertirli di nuovo al loro tipo anonimo, e non si può fare che .... in realtà, è possibile (controllare la sezione 'Casting per i tipi anonimi'), ma è un trucco intelligente che potrebbe non funzionare in futuro.
Altre opzioni (migliore) per ottenere il valore di una proprietà:
- Utilizzare un tipo concreto, invece di un tipo anonimo
- Usa riflessione per ottenere il valore della proprietà
- C # 4.0: l'uso della parola chiave dynamic quindi chiamare la proprietà è necessario
- Ottieni il valore nel controllo associato (ad esempio, se il vostro origine dati è associato a un DataGridView, ottenere il valore della cella datagridview al posto del valore di origine vincolante)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow