Comment puis-je afficher le contenu de ce tableau à l’aide de DataGridView?

J’ai créé un tableau en 2 dimensions de chaînes et je l’ai rempli. J’essaie de le lier à un contrôle DataGrid comme ceci:

ssortingng[][] Array = new ssortingng[100][]; dataGridView.DataSource = Array; 

Au lieu de voir le contenu du tableau, je vois les colonnes suivantes: Length, LongLenth, Rank, SyncRoot, IsReadOnly, IsFixedSize, IsSyncrhonized.

Ainsi, au lieu d’afficher le contenu de mon tableau, il affiche les propriétés du tableau. Qu’ai-je fait de mal?

Lorsque vous autorisez le contrôle de grid à générer automatiquement des colonnes, il énumère les propriétés de cet object et crée une colonne pour chacune d’elles. Il n’a aucun moyen de savoir que vous souhaitez afficher ceci sous forme de grid de valeurs de tableau.

Vous devrez créer un nouvel object (tel qu’une liste énumérable d’une classe) en dehors du tableau avec les propriétés que vous souhaitez lier en tant que colonnes. Une méthode rapide consiste à utiliser un type anonyme, construit à l’aide d’une requête LINQ. Quelque chose comme:

 ssortingng[][] Array = new ssortingng[100][]; for(int i = 0; i < 100; i++) // Set some values to test Array[i] = new string[2] { "Value 1", "Value 2" }; dataGridView.DataSource = (from arr in Array select new { Col1 = arr[0], Col2 = arr[1] }); Page.DataBind(); 

Ici, nous parcourons les 100 éléments du tableau. Chaque élément est un tableau de 2 chaînes. Nous créons un type anonyme à partir de ces deux chaînes. Ce type a deux propriétés: Col1 et Col2 . Col1 sera défini sur index de tableau 0 et Col2 sur index de tableau 1. Ensuite, nous construisons la grid avec cette énumération de types anonymes. Cela ressemblera à quelque chose comme:

entrez la description de l'image ici

Vous pouvez bien sûr définir exactement le mode de création des colonnes en définissant AutoGenerateColumns sur False et en AutoGenerateColumns la collection Columns . Cela peut également être fait de manière déclarative dans votre fichier ASPX.

Vous devez convertir votre tableau en un datatable

 ssortingng[][] Array = new ssortingng[100][]; DataTable dt= new DataTable(); int l= Array.length; for(int i=0;i 

Tu pourrais faire quelque chose comme ça

 ssortingng[][] Array = new ssortingng[100][]; ArrayList arrList = new ArrayList(); for(int i=0;i<100;i++) { arrList.Add(new ListItem(Array[i, 0], Array[i, 1])); } Grid2D.DataSource = arrList; Grid2D.DataBind(); 

Voir ce lien Liaison de tableaux à GridView dans ASP.Net

 using Linq; var Found = (from arr in myArray2D select new { row1 = arr[0], row2 = arr[1], row3 = arr[2] }) .Where(y => (y.row1.ToUpper() + y.row2.ToUpper()) .Contains(sText.ToUpper())) .OrderByDescending(y => Convert.ToInt32(y.row3)).ToList(); dataGridViewFind.DataSource = Found; dataGridViewFind.AutoResizeColumns();