Hoi,
Ik heb een heel raar probleem, ik kan er niet bij hoe het kan:
Als ik mijn procedure de eerste keer draai, haalt hij alle data netjes op. Als ik dan de data wijzig, en ik wil de data een tweede keer ophalen, dan zijn sommige rijen, ineens heel anders van waarde!
Voorbeeld correcte data uit sql managementstudio:
id,vertex1,vertex2,count
1,129,111,8
2,61,61,32
....
38,500,6,256
Voorbeeld foutieve data in the quickwatch van Visual studio op _ECADB.edges:
id,vertex1,vertex2,count
1,113,54,9
2,74,112,114
....
38,1022,71,1
Ik kwam er achter, doordat waarde 1022 bij id 38 zo hoog was dat hij niets meer kon vinden met die waarde op regel 50.
Het gaat om code regel 42-50, daar blijken mijn edges ineens te veranderen.
update: het gaat fout met de datacontext, maar ik begrijp niet hoe. ik heb nu niet de globale datacontext gebruikt, maar een nieuwe gemaakt en dat werkt wel.
Ik heb een heel raar probleem, ik kan er niet bij hoe het kan:
Als ik mijn procedure de eerste keer draai, haalt hij alle data netjes op. Als ik dan de data wijzig, en ik wil de data een tweede keer ophalen, dan zijn sommige rijen, ineens heel anders van waarde!
Voorbeeld correcte data uit sql managementstudio:
id,vertex1,vertex2,count
1,129,111,8
2,61,61,32
....
38,500,6,256
Voorbeeld foutieve data in the quickwatch van Visual studio op _ECADB.edges:
id,vertex1,vertex2,count
1,113,54,9
2,74,112,114
....
38,1022,71,1
Ik kwam er achter, doordat waarde 1022 bij id 38 zo hoog was dat hij niets meer kon vinden met die waarde op regel 50.
Het gaat om code regel 42-50, daar blijken mijn edges ineens te veranderen.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
| private void GetNodeXLControl() { try { SocialNetworkControls.Clear(); // maak een nieuwe NodeXL control NodeXLControl ctx = new NodeXLControl(); //Maak het grafiek object Graph mGraph = new Graph(); // Haal alle vertices op uit de view vertices_plus, // die alleen vertices returned die aan edges zitten met een count groter dan 5 var vertices = from vt in _ECADB.vertices_labels select vt; // Voor elke vertice, uit de vertice_plus view, dus een vertice_plus volgens LINQ2SQL foreach (vertices_label vt in vertices) { Vertex v1 = new Vertex(); v1.SetValue(ReservedMetadataKeys.PerVertexLabel, vt.label); v1.SetValue(ReservedMetadataKeys.VertexToolTip, vt.label); v1.SetValue(ReservedMetadataKeys.Visibility, VisibilityKeyValue.Hidden); v1.SetValue(ReservedMetadataKeys.PerVertexLabelFontSize, (Single)WpfGraphicsUtil.WindowsFormsFontSizeToWpfFontSize(5)); v1.SetValue(ReservedMetadataKeys.PerVertexLabelFillColor, Colors.Pink); v1.Name = vt.vertex_id.ToString(); mGraph.Vertices.Add(v1); } // Lijn dikte varieert van 1 tot 20, waarbij dikte 20 het maximale aantal verbindingen tussen twee vertices voorstelt. //int maxwidth = (from ew in edges orderby ew.count descending select ew.count).First(); // OF // Lijn dikte varieert van 1 tot 20, waarbij dikte 10 het gemiddelde voorstelt van de vertice count // en dubbele van het gemiddelde tot het maximale allemaal dikte 20 is. int maxwidth = (int)(from ew in _ECADB.vwAvgEdgeCounts select ew.avgmailcount).First(); maxwidth = maxwidth == 0 ? 1 : maxwidth; // Haal alle edges op var edges = from edg in _ECADB.edges select edg; foreach (var ed in edges) { IVertex v1; IVertex v2; var edx = ed; mGraph.Vertices.Find(edx.vertex1_id.ToString(), out v1); mGraph.Vertices.Find(edx.vertex2_id.ToString(), out v2); v1.SetValue(ReservedMetadataKeys.Visibility, VisibilityKeyValue.Visible); v2.SetValue(ReservedMetadataKeys.Visibility, VisibilityKeyValue.Visible); Edge e1 = new Edge(v1, v2, true); Single tempWidth = (edx.count ?? 1) / maxwidth * 10; float mWidth = tempWidth < 1 ? 1 : tempWidth; mWidth = mWidth > 20 ? 20 : mWidth; e1.SetValue(ReservedMetadataKeys.PerEdgeWidth, mWidth); e1.SetValue(ReservedMetadataKeys.PerAlpha, (Byte)55); mGraph.Edges.Add(e1); } // Grafiek van de control ophalen ctx.Graph = mGraph; // Gebruik het Furchterman Reingold force-based algoritme; FruchtermanReingoldLayout lay = new FruchtermanReingoldLayout(); // C is kracht constante van de simulatie. Hoger is meer afstoting tussen vertices lay.C = (Single)2; // Iterations is het aantal itteraties van de simulatie lay.Iterations = 10; // Attach layout aan de control ctx.Layout = lay; // Stel wat control opties in over de opmaak ctx.ShowVertexToolTips = true; ctx.GraphDrawer.VertexDrawer.Shape = VertexShape.Sphere; ctx.GraphDrawer.VertexDrawer.LabelPosition = VertexLabelPosition.TopCenter; // voeg control toe aan control collectie van form, tekent grafiek zonder layout automatisch SocialNetworkControls.Add(ctx); //Teken grafiek opnieuw maar nu met layout ctx.DrawGraphAsync(true); } catch (Exception ex) { MessageBox.Show("Error on NodeXL: " + ex.Message + "\n" + ex.InnerException); } } |
update: het gaat fout met de datacontext, maar ik begrijp niet hoe. ik heb nu niet de globale datacontext gebruikt, maar een nieuwe gemaakt en dat werkt wel.