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) + " " + dr.GetString(1) + "</div>";// +"<br />";
current += "<div class='line2'>" + dr.GetTimeSpan(2).ToString().TrimEnd('0').TrimEnd('0').TrimEnd(':') + " - " + dr.GetTimeSpan(3).ToString().TrimEnd('0').TrimEnd('0').TrimEnd(':') + "</div>";// +"<br />";
current += "<div class='line3'>" + dr.GetString(4) + " " + dr.GetString(5) + "</div>";
current += "</div>";
modulesList.Add(current);
}
conn.Close();
return modulesList.ToArray();
}
Fehler
Ok danke. Siehe aktualisierten Code oben. Ich bekomme immer noch den Fehler. Musste ich timeSlotInt und Day definieren? –
@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
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. :) –