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.

È stato utile?

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
scroll top