Salut - J'ai une question de liaison de données assez simple (du côté de l'écriture des commandes de liaison de données) qui m'a confondu.Liaison de données à l'aide de DataBinder.GetPropertyValue()
En regardant le code source .NET, il semble que la plupart des liaisons de données sont extraites via la méthode DataBinder.GetPropertyValue(). Cette méthode prend un objet et un nom de propriété, et la méthode trouvera la valeur via un TypeDescriptor ou une réflexion ou autre. Cela fonctionne très bien sur un IListSource tel que DataSet, mais je n'arrive pas à le faire fonctionner avec un objet XmlNode. Je sais que vous pouvez lier un XmlNodeList à une source de données dans ASP.NET, donc je m'attendrais à ce que cela fonctionne. Voici le code:
class Program
{
static void Main(string[] args)
{
XmlDocument doc = new XmlDocument();
doc.Load("Data.xml");
IEnumerable list = doc.SelectNodes("/Data/Row");
foreach (object item in list)
{
object val = DataBinder.GetPropertyValue(item, "Number"); //Expect to see “1”, “2” and “3”
}
}
}
Et Data.xml est:
<?xml version="1.0" encoding="utf-8" ?>
<Data>
<Row Number="1" />
<Row Number="2" />
<Row Number="3" />
</Data>
Quand j'appelle GetPropertyValue, je reçois cette exception:
DataBinding: 'System.Xml.XmlElement' ne contient pas une propriété avec le nom "Number".
Dans ma boucle de liaison de données, je veux juste faire une boucle sur tout IEnumerable - je ne veux pas de cas particulier le type XmlNode. Des contrôles tels que DropdownList auront un cas particulier IListSource et effectueront certaines conversions, cependant d'autres IEnumerables sembleront être traités tels quels. Merci!
Si vous faites cela, vous avez un boîtier spécial XmlNode. Je veux être capable de transmettre un IEnumerable de DataRows, un HashTable, etc. Fondamentalement tout ce que vous pourriez typiquement lier à une source de données dans ASP.NET. – Mike
Fait quelques changements ... – bytebender
Comme je l'ai dit, je ne veux pas supposer que IEnumerable est un XmlNode. Je veux que ça marche avec n'importe quoi .. Merci quand même. – Mike