2017-04-22 3 views
0

Im folgenden Code versuche ich eine Sitzungsvariable zu haben, die eine Liste von Strings enthält, die alle ausgewählten ModuleId enthält. Ich verwende das module_Changed-Ereignis, um moduleIDs aus dieser Liste hinzuzufügen oder zu entfernen. Rufen Sie dann den getModulesAtCurrentSlot in einer Schleife für jede Modul-ID in der Liste auf und verketten Sie die zurückgegebene Zeichenfolge [] s zu einer längeren Zeichenfolge [] oder Liste, die angezeigt werden soll.ASP.NET Überladene Methode auf Foreach-Schleife innerhalb einer Liste

Ich bekomme den Fehler "Der Name 'TimeslotInt' und 'Day' existiert nicht im aktuellen Kontext". Die tatsächliche getModulesAtCurrentSlot-Methode befindet sich in einer separaten .cs-Datei, daher habe ich dba.getModulesAtCurrentSlot ... verwendet, um auf die Methode zu verweisen, aber ich erhalte immer noch diese Fehler.

.aspx

<asp:TemplateField> 
    <ItemStyle HorizontalAlign="Center" Width="40px"></ItemStyle> 
      <ItemTemplate> 
       <asp:CheckBox ID="chkBox2" runat="server" ToolTip='<%# Eval("ModuleId") %>' OnCheckedChanged="module_Changed" /> 
      </ItemTemplate> 
    </asp:TemplateField> 

CS-

protected void module_Changed(object sender, EventArgs e) 
    { 
     List<string> lst; 
     if (Session["lst"] != null) 
      lst = (List<string>)Session["lst"]; 
     else 
      Session.Add("lst", new List<string>()); 

     // Retrieve the check box ModuleId value to add to my SELECT query 
     string moduleid = ((CheckBox)sender).ToolTip; 

     // add your own code to check if checkbox is checked or unchecked to see if you need to add or remove the ID from the list 

     // to add 
     if (lst.Contains(moduleid) == false) 
      lst.Add(moduleid); 

     // to remove - add your own code 

     int timeslotInt = 0; 
     String Day = "text"; 

     List<string> lstResult = new List<string>(); 
     foreach (var moduleID in lst) 
     { 
      lstResult.Add(dba.getModulesAtCurrentSlot(timeslotInt, module, Day); 
     } 

     // do something to display lstResult 
     Gridview1.DataSource = lstResult; 
     Gridview1.DataBind(); 
    } 

} 

DBAccess.cs

public String[] getModulesAtCurrentSlot(int timeslotInt, String moduleID, String Day) 
    { 
     List<String> modulesList = new List<string>(); 
     if (conn.State.ToString() == "Closed") 
     { 
      conn.Open(); 
     } 
     SqlCommand newCmd = conn.CreateCommand(); 
     newCmd.Connection = conn; 
     newCmd.CommandType = CommandType.Text; 
     newCmd.CommandText = "SELECT DISTINCT Module.ModuleCode,ClassType.ClassTypeName,Convert(time,Class.StartTime), Convert(time,Class.EndTime),Building.BuildingName,RoomCode.RoomCode,Class.Color" + 
       " FROM Class INNER JOIN Module ON Class.ModuleId = Module.ModuleId INNER JOIN RoomCode ON Class.RoomCodeId = RoomCode.RoomcodeId INNER JOIN Building ON RoomCode.BuildingId = Building.BuildingId INNER JOIN Days ON Class.DayId = Days.DayID INNER JOIN ClassType ON Class.ClassTypeId = ClassType.ClassTypeId WHERE " + 
           " Module.ModuleId = " + moduleID + " AND Convert(Date,StartTime) = '" + Day + "' AND " + timeslotInt.ToString() + " BETWEEN ClassScheduleStartTimeId and ClassScheduleEndTimeId"; 
     SqlDataReader dr = newCmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      //Module.ModuleCode,ClassType.ClassTypeName,Convert(time,Class.StartTime), Convert(time,Class.EndTime),Building.BuildingName,RoomCode.RoomCode,Class.Color 
      //String current = "<div class='slot'>"; 
      String current = "<div class='slot' " + (!dr.IsDBNull(6) ? "style=\"background-color: " + dr.GetString(6) + ";\"" : "") + ">"; 
      current += "<div class='line1'>" + dr.GetString(0) + "&nbsp;" + dr.GetString(1) + "</div>";// +"<br />"; 
      current += "<div class='line2'>" + dr.GetTimeSpan(2).ToString().TrimEnd('0').TrimEnd('0').TrimEnd(':') + "&nbsp;-&nbsp;" + dr.GetTimeSpan(3).ToString().TrimEnd('0').TrimEnd('0').TrimEnd(':') + "</div>";// +"<br />"; 
      current += "<div class='line3'>" + dr.GetString(4) + "&nbsp;" + dr.GetString(5) + "</div>"; 
      current += "</div>"; 
      modulesList.Add(current); 
     } 
     conn.Close(); 
     return modulesList.ToArray(); 
    } 

Fehler

enter image description here

Antwort

1

Es scheint, als könnten Sie Parameternamen mit Variablen verwechseln.

Die Funktion getModulesAtCurrentSlot nimmt drei Parameter auf, und Sie müssen jeweils einen Wert übergeben. Die übergebenen Werte müssen keine Variablen mit demselben Namen wie die Funktionsparameter sein, sie müssen nur die gleichen Typen haben.

Ihre Funktion definiert keine Variable mit dem Namen timeSlotInt oder , daher können Sie diese Werte nicht verwenden.

+0

Ok danke. Siehe aktualisierten Code oben. Ich bekomme immer noch den Fehler. Musste ich timeSlotInt und Day definieren? –

+0

@DavidCraven hast du auch die Variable 'dba' definiert? Ich sehe es nicht in deinem Code. Was ist die neue vollständige Fehlermeldung, die Sie bekommen? – ChaseMedallion

+0

Oben auf der Seite habe ich: mit Qsis.App_Code; enthält die CS-Datei 'DBAccess', die die getModulesAtCurrentSlot-Methode enthält. Die selbe Fehlermeldung ist jetzt nur 'Modul' im aktuellen Kontext nicht vorhanden. Ich habe den Code für getModulesAtCurrentSlot hinzugefügt. :) –

Verwandte Themen