2009-07-01 10 views
11

Je dois créer un tableau croisé dynamique dans .net. Impossible d'utiliser un contrôle tiers (sauf s'il est gratuit). J'ai essayé de trouver une documentation qui explique comment créer un tableau croisé dynamique (algorithme ou étapes) en général mais presque tout est lié à Excel. Est-ce que quelqu'un sait comment créer un tableau croisé dynamique dans C# ??? MerciTableau croisé dynamique dans C#

+0

Essayez-vous de créer un tableau croisé dynamique Excel ou essayez-vous d'afficher une sorte de données pivotées dans un GridView? – Jimmy

+0

J'essaye d'afficher des données dans un GridView. – Sheraz

+0

Quelle est la source de données? Si une forme de SQL, je suggère que vous le fassiez à SQL. Y a-t-il une chance que vous puissiez utiliser LINQ? –

Répondre

2

MS-Access a la commande Transform (qui fait un pivot), de sorte que vous pouvez utiliser ADO.NET pour interroger un fichier mdb ms accès, puis utilisez les requêtes passthrough là pour arriver à la source de données qui peuvent » t pivot (généralement MS-SQL/T-SQL). J'ai fait une preuve de concept de cela et cela a fonctionné et était environ 5000 LOC plus court que l'implémentation de VBScript qui a fait le pivot en utilisant des tableaux.

Les remarques désobligeantes habituelles concernant MS-Access ne s'appliquent pas ici car vous ne stockez pas réellement de données dans MS-Access.

+0

une chance de publier un exemple ici – Sheraz

+0

Transformer la commande: http://msdn.microsoft.com/en-us/library/bb208956.aspx Utiliser MS-Access via .NET http://www.csharphelp.com/archives/ archive70.html Et le reste implique des tables de liaison vos vues préférées ou faire une requête passthrough/proc stockée pour les données source: http://www.aspfree.com/c/a/Microsoft-Access/On-Using-Passthrough-Queries-in -MS-Access / – MatthewMartin

6

Aider ici http://msdn.microsoft.com/en-us/library/aa172756%28SQL.80%29.aspx

réelles Tableau:

Year Quarter Amount  
1990  1  1.1 
1990  2  1.2 
1990  3  1.3 
1990  4  1.4 
1991  1  2.1 
1991  2  2.2 
1991  3  2.3 
1991  4  2.4 
1992  4  2.4 

sortie souhaitée: (ici Q pour le premier trimestre)

Year  Q-1  Q-2  Q-3  Q-4  
1990  1.1  1.2  1.3  1.4 
1991  2.1  2.2  2.3  2.4 
1992  0.0  0.0  0.0  2.4 

Requête:

Use Northwind  
GO 

CREATE TABLE Pivot  
(Year  SMALLINT,  
    Quarter TINYINT,  
    Amount DECIMAL(2,1))  
GO 

INSERT INTO Pivot VALUES (1990, 1, 1.1)  
INSERT INTO Pivot VALUES (1990, 2, 1.2)  
INSERT INTO Pivot VALUES (1990, 3, 1.3)  
INSERT INTO Pivot VALUES (1990, 4, 1.4)  
INSERT INTO Pivot VALUES (1991, 1, 2.1)  
INSERT INTO Pivot VALUES (1991, 2, 2.2)  
INSERT INTO Pivot VALUES (1991, 3, 2.3)  
INSERT INTO Pivot VALUES (1991, 4, 2.4)  
INSERT INTO Pivot VALUES (1992, 4, 2.4) 
GO 

SELECT * FROM Pivot  
GO 

SELECT Year,  
    SUM(CASE Quarter WHEN 1 THEN Amount ELSE 0 END) AS Q1,  
    SUM(CASE Quarter WHEN 2 THEN Amount ELSE 0 END) AS Q2,  
    SUM(CASE Quarter WHEN 3 THEN Amount ELSE 0 END) AS Q3,  
    SUM(CASE Quarter WHEN 4 THEN Amount ELSE 0 END) AS Q4  
FROM Northwind.dbo.Pivot  
GROUP BY Year  
GO 

Une autre sortie:

SELECT P1.*, (P1.Q1 + P1.Q2 + P1.Q3 + P1.Q4) AS YearTotal  
FROM (SELECT Year, 
      SUM(CASE P.Quarter WHEN 1 THEN P.Amount ELSE 0 END) AS Q1, 
      SUM(CASE P.Quarter WHEN 2 THEN P.Amount ELSE 0 END) AS Q2, 
      SUM(CASE P.Quarter WHEN 3 THEN P.Amount ELSE 0 END) AS Q3, 
      SUM(CASE P.Quarter WHEN 4 THEN P.Amount ELSE 0 END) AS Q4 
    FROM Pivot AS P 
    GROUP BY P.Year) AS P1 
GO 
0

CellSetGrid est un contrôle, qui offre un tableau croisé dynamique comme la fonctionnalité ASP .Net Open Source (C#).

Cette habitude d'être disponible pour téléchargement dans ce site: http://www.SQLServerAnalysisServices.com

Maintenant, le site ne héberge ce contrôle plus. J'ai donc téléchargé la source du contrôle - CellSetGrid here.

  1. Vous pouvez construire la source
  2. Ajouter ceci comme contrôle dans la boîte à outils Visual Studio.
  3. Glisser et Drop Control à un formulaire Web
  4. Définissez la chaîne de connexion au cube
  5. Cela montrera toutes les dimensions et les groupes de mesures de sorte que vous pouvez faire glisser n drop ce que vous voulez obtenir un tableau croisé dynamique comme la fonctionnalité
Questions connexes