2010-03-04 8 views
2

Overflow: 3 J'ai une sorte de question difficile.Sélectionnez DataTable (seulement certaines valeurs) à partir de ??? _ GetDisplayData et les données GROUP par jours où les règles de groupe sont différentes pour les différentes colonnes

Je vais essayer d'expliquer clairement mon idée avec mon mauvais anglais:/besoin choisir de DataTable CERTAINS valeurs de ??? _ GetDisplayData procédure pour chaque jour du mois previos (GROUP IT) où règles de groupe pour différentes colonnes est différent

Je dois sel ect certaines valeurs dans la procédure stockée d'autre procédure stockée comme celle-ci:

SELECT X FROM Y_Procedure(@ProcedureParameters) 

Je dois également sélectionner procédure SQL dynamique comme

[email protected]+'_Procedure' 
SELECT X FROM Y_Procedure(@ProcedureParameters) 

Aussi je dois le charger à DataTable: -/

INSERT INTO @Report (CellHorizontal, CellVertical, CellValue) --to TABLE 
SELECT Date,X2,X3 FROM Y_GetDisplayData(@Param) 

    SET NOCOUNT OFF; 

SELECT * 
FROM @Report 

GetDisplayData fonctionne avec des paramètres comme sélection et ne pas les retours SQL DataTable et il n'y a aucun moyen de recoder les procédures de GetDisplayData , c'est juste des procédures constantes pour moi.

Enfin je dois noeuds du groupe à partir de ce tableau

INSERT INTO @Report (CellHorizontal, CellVertical, CellValue) 
    SELECT T1.Date, 
IF ((Select grouptype...)=1) T1.X2 + T2.X2 
    ELSE IF ((Select grouptype...)=2) AVG(T1.X2,T2.X2), 
IF ((Select grouptype...)=1) T1.X3 + T2.X3 
    ELSE IF ((Select grouptype...)=2) AVG(T1.X3,T2.X3), 
    (SELECT T2.Date,X2,X3 FROM Y_GetDisplayData(@Param) T2 
    WHERE T2.Date>T1.Date AND T2.Date>=T1.Date) 
    FROM Y_GetDisplayData(@Param) T1 
    GROUP BY EVERY DAY ??? 
    --and here is epic fail 

Je peux faire toutes les choses sur le serveur asp:

Et C# me permet d'utiliser quelque chose comme SelectCommand = IzmProc + "_GetDisplayData";

Et alors je travailler (sélectionner des données spéciales) avec DataTables sur ASP.NET Server mais il est préférable de tout faire sur SQL ... Mais comme il est juste irréalisable sur SQL> _ <

I Gonna penser à C# réalisation

mais mon code est très étrange, obtenez des erreurs et ne fonctionne pas> _ <

public static DataTable GetReport(string Param) 
    { 
     System.Configuration.ConnectionStringSettings connSetting = ConfigurationManager.ConnectionStrings["FlowServerConnectionString"]; 
     SqlConnection conn = new SqlConnection(connSetting.ConnectionString); 
     SqlCommand cmd = new SqlCommand(Param + " _GetDisplayData 90,1,1,80,1,1,0"); 
     try 
     { 
      DataTable dt = new DataTable(); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      da.Fill(dt); 

      //------------------------------------------------------------ 
      int dayOfWeekNumber = (int)DateTime.Today.DayOfWeek - (int)System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; 
      var previosWeekFirstDay = DateTime.Today.AddDays(-7 - dayOfWeekNumber); 
      var yearsterday = DateTime.Today.AddDays(-1); 
      var previosWeekLastDay = previosWeekFirstDay.AddDays(6); 
      var previosMonthFirstDay = DateTime.Today.AddMonths(-1); 
      previosMonthFirstDay = previosMonthFirstDay.AddDays(-previosMonthFirstDay.Day + 1); 
      var previosMonthLastDay = previosMonthFirstDay.AddDays(DateTime.DaysInMonth(previosMonthFirstDay.Year, previosMonthFirstDay.Month) - 1); 
      //------------------------------------------------------------- 
      //Ok... now I need to group it on DT->everyday in month 
      DataRow[] drx; 
      DataTable newDT= new DataTable(); 
      foreach (DataRow row in dt.Rows) 
      { 
       string s = row["DailyRecTime"].ToString(); 
       drx = dt.Select("DailyRecTime= '" + s + "'"); 
       for (DateTime x = previosMonthFirstDay; x <= previosMonthLastDay; x.AddDays(1)) 
       { 
        foreach(DataRow drr in drx) 
        if (x.ToString() == drr[0].ToString()) 
        { 
         drx = dt.Select("DailyRecTime= '" + s + "'"); 
         DataRow newRow = new DataRow(); //ERROR HERE 
         double[] temp = new double[drx[0].Table.Columns.Count]; 
         foreach (DataRow dr in drx) 
         { 
          for(int dc=1; dc<dr.Table.Columns.Count; dc++) 
          { 
           if (dr.Table.Columns[dc].Caption.ToString() == "C1_mol") //for example 
            temp[dc] += double.Parse(dr[dc].ToString()); // nonsense 
          } 
         } 
         foreach (DataColumn dcl in drx[0].Table.Columns) 
         { 
          newRow.Table.Columns.Add(dcl); 
          newRow[dcl] = temp[dcl]; //error here :) 
         } 
         newDT.Rows.Add(newRow); 
        } 
       } 
      } 

      return newDT; 
     } 
     catch (Exception) 
     { 
      return null; 
     } 

omg ...: -/

et merci de lire et d'essayer de me aider: 3

+1

(re modérateur commentaire; vous devez attendre quelques jours pour commencer une prime) –

Répondre

1
DataRow newRow = new DataRow(); //ERROR HERE 

essayer

DataRow newRow = dt.NewRow(); 
1
DataRow[] foundRows = dt.Select(null,dt.Columns[0].ColumnName); // Sort with Column name 
for (int i = 0 ; i <= foundRows.GetUpperBound(0); i++) 
{ object[] arr = new object[foundRows.GetUpperBound(0)]; 
for (int j = 0; j <= foundRows[i].ItemArray.GetUpperBound(0); j++) 
{ arr[j]=foundRows[i][j]; } 
DataRow data_row = newDT.NewRow(); 
data_row.ItemArray=arr; 
newDT.Rows.Add(data_row); 

}

a obtenu ce billet depuis
// Hussain Hyder Ali Khowaja // Karachi, Pakistan

+0

pouvez-vous faire un commentaire comment cela fonctionne: S Je ne peux pas comprendre comment je peux l'utiliser avec ma tâche encore :( – Cynede

0

ohk faire plutôt une vue de données comme celui-ci, et utiliser te fonction de tri, il a

dataview v =dt.defaultview; 
v.sort="columnName DESC";//columName can be DailyRecTime, DESC fro decending or ASC for asscending 
dt=v.toTable(); 
Questions connexes