Les données de la colonne(s) pour l'axe n ° 0 ne peut pas être de type string - Google Charts
J'essaie d'afficher certaines données dans Google Charts, mais obtenir cette erreur:
Data column(s) for axis #0 cannot be of type string..
J'ai deux propriétés de cette classe:
public class GAStatistics
{
public string Date { get; set; }
public string Visitors { get; set; }
}
Je suis de passage présente une liste de ces propriétés à partir de ce contrôleur:
public class GAStatisticsController : Controller
{
//GET: /ShopStatistics/
public ActionResult GetData()
{
return Json(CreateCompaniesList(), JsonRequestBehavior.AllowGet);
}
private IEnumerable<GAStatistics> CreateCompaniesList()
{
List<GAStatistics> ListGaVisitors = new List<GAStatistics>();
foreach (var row in d.Rows)
{
GAStatistics GaVisits = new GAStatistics(row[0], row[1]);
ListGaVisitors.Add(GaVisits);
}
return ListGaVisitors;
}
}
De ce point de vue dont je vous passe la liste à partir du contrôleur:
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("visualization", "1", { packages: ["corechart"] });
google.load("visualization", "1", { packages: ["treemap"] });
google.setOnLoadCallback(drawChart);
function drawChart() {
$.get('/GAStatistics/GetData', {},
function (data) {
var tdata = new google.visualization.DataTable();
tdata.addColumn('string', 'Date');
tdata.addColumn('string', 'Visitors');
for (var i = 0; i < data.length; i++) {
//tdata.addRow([data[i].Year, data[i].Salary, data[i].Expense]);
tdata.addRow([data[i].Date, data[i].Visitors]);
}
var options = {
title: "Expenses, salary For the current year"
};
var chart1 = new google.visualization.AreaChart(document.getElementById('chart_div1'));
chart1.draw(tdata, options);
});
}
</script>
Une idée?
Vous devez convertir votre C# datetime chaîne pour le javascript de type Date. Il doit être quelque chose comme
Ce n'
Grâce vorrtex. Il est donc nessesary de convertir la chaîne de la valeur à la valeur de date en javascript? J'ai effectivement suivi un guide lors de l'écriture de ce code et le gars qui a écrit quelque chose comme cela, avec une Année de la propriété dans une liste - An = new DateTime(2014, 3, 1).ToString("yyyy/mm/dd") asgaliant - je ne sais pas, c'est tout ive a obtenu, trouvé un exemple en ligne.
Je ne sais pas comment votre
Oh okej. Bien "Date" est une propriété de chaîne à partir de C#-classe GAStatistics, cette classe contient une chaîne de propriété appelée Visiteurs. La Date est formaté comme "2014-01-24" et les Visiteurs contient des chiffres comme "873".
tdata.addRow([new Date(2014,1,1)...
, mais au lieu de new Date
vous devriez utiliser votre propre fonction d'analyse syntaxique. Peut-être que par la conversion de C# datetime pour un timestamp nombre comme c'est expliqué ici: stackoverflow.com/a/7596509/427225Ce n'
data
ressembler?Grâce vorrtex. Il est donc nessesary de convertir la chaîne de la valeur à la valeur de date en javascript? J'ai effectivement suivi un guide lors de l'écriture de ce code et le gars qui a écrit quelque chose comme cela, avec une Année de la propriété dans une liste - An = new DateTime(2014, 3, 1).ToString("yyyy/mm/dd") asgaliant - je ne sais pas, c'est tout ive a obtenu, trouvé un exemple en ligne.
Je ne sais pas comment votre
string Date
peuvent être converties. Mais si votre date de chaîne se présente comme "2011-10-20", ou "1999/01/31", ou "01 Jan 1990", il sera facilement analysée par javascript, par exemple new Date("2011-10-20")
. Mettre un debug point d'arrêt quelque part et regarder quelle est la valeur de la Date
.Oh okej. Bien "Date" est une propriété de chaîne à partir de C#-classe GAStatistics, cette classe contient une chaîne de propriété appelée Visiteurs. La Date est formaté comme "2014-01-24" et les Visiteurs contient des chiffres comme "873".
OriginalL'auteur WhoAmI | 2014-03-14
Vous devez vous connecter pour publier un commentaire.
J'ai testé votre exemple et a trouvé que le principal problème est que la deuxième colonne
Visitors
doit être un nombre au lieu d'une chaîne.J'ai remplacé le type de colonne dans la
tdata.addColumn('number', 'Visitors');
ligne et a ajoutéparseInt
l'intérieur de la boucle:Également la première colonne
Date
aurait pu rester unstring
, mais je l'ai remplacé ce type à êtredate
et a ajouténew Date
de conversion.L'info-bulle "20140126" semble être une date "2014-01-26" sans trait d'union, c'est pourquoi il ne fonctionne pas. Ceci peut être corrigé par l'ajout de ces traits d'union et à l'aide d'un code comme
str.substr(0, 4)+"-"+str.substr(4,2)+"-"+str.substr(6,2)
. De cette façon devrait être mieux parce que les info-bulles et des étiquettes à afficher plus logique des valeurs de date au lieu de chiffres.J'ai mis à jour le code dans ma réponse, vous pouvez essayer. Si cela ne fonctionne pas, vous pouvez poster une nouvelle question sur ce site.
Il travaille maintenant excellent. Merci beaucoup =)
Salut vorrtex, désolé pour creuser ce à nouveau, mais je me demandais ce que les chiffres (0,4), (4,2) et (62) signifie. Serait bien comprendre ce code entièrement. Merci
OriginalL'auteur vorrtex