Création d'un objet DataTable avec des données factices
-
10-07-2019 - |
Question
J'essaie de lier un DataTable à un accordéon et j’ai trouvé que, si je récupérais le DataTable d’une base de données à l’aide d’un adaptateur de table, il se liait parfaitement à l’accordéon. Cependant, je voulais créer une table factice Si je n'ai pas accès à ma base de données), le code pour créer la table factice est ci-dessous:
DataTable table2 = new DataTable("articletable");
table2.Columns.Add("articleID");
table2.Columns.Add("title");
table2.Columns.Add("content");
DataRow row = table2.NewRow();
row[0] = "1";
row[1] = "article name";
row[2] = "article contents go here";
table2.Rows.Add(row);
Lorsque j'essaie de lier les données à cette table, l'accordéon ne s'affiche pas. Je peux le lier à un gridview ou à un detailview mais pas à un accordéon.
La solution
Après 4 heures passées à me cogner la tête contre le mur, j'ai découvert que le champ DataSource était TRÈS difficile.
Voici mon code:
DataSet ds = new DataSet();
DataTable dt = new DataTable();
dt.Columns.Add("Name");
dt.Columns.Add("Branch");
dt.Columns.Add("Officer");
dt.Columns.Add("CustAcct");
dt.Columns.Add("Grade");
dt.Columns.Add("Rate");
dt.Columns.Add("OrigBal");
dt.Columns.Add("BookBal");
dt.Columns.Add("Available");
dt.Columns.Add("Effective");
dt.Columns.Add("Maturity");
dt.Columns.Add("Collateral");
dt.Columns.Add("LoanSource");
dt.Columns.Add("RBCCode");
dt.Rows.Add(new object[] { "James Bond, LLC", 120, "Garrison Neely", "123 3428749020", 35, "6.000", "$24,590", "$13,432",
"$12,659", "12/13/21", "1/30/27", 55, "ILS", "R"});
ds.Tables.Add(dt);
accReportData.DataSourceID = null;
accReportData.DataSource = ds.Tables[0].DefaultView;
accReportData.DataBind();
Il s'avère que l'accordéon aime seulement être lié à la vue par défaut d'un tableau de jeu de données. J'ai essayé de me lier à seulement un DataTable (dt) et cela a échoué. Même dt.DefaultView a échoué. Une fois que je l'ai ajouté à un DataSet, il se lie comme un champion. Très ennuyeux, avec perte de temps perdu. Je sais que vous avez probablement oublié cela depuis longtemps, mais je voulais le rendre accessible aux futurs chercheurs. Accordion.DataSource doit être lié à un DataSet.Table.DefaultView pour fonctionner.
Autres conseils
Assurez-vous de spécifier un type pour les colonnes dans la table2.Colonnes.Ajoutez (...)
En outre, comme indiqué dans la réponse ci-dessous:
https://stackoverflow.com/a/6108163/637903
Vous pouvez lier le contrôle Accordion à un DataTableReader construit à partir du DataTable d'origine
accReportData.DataSource = new System.Data.DataTableReader(ds.Tables[0]);
accReportData.DataBind();