以下のコードでは、選択したModuleIdをすべて保持する文字列のリストを含むセッション変数を作成しようとしています。私はこのリストからmoduleIDを追加または削除するためにmodule_Changedイベントを使用しています。次に、リスト内の各moduleidのループ内でgetModulesAtCurrentSlotを呼び出し、返された文字列[]を連結する1つの長い文字列[]またはListを表示します。リスト内のForeachループでASP.NETオーバーロードされたメソッド
「名前 'timeslotInt'と 'Day'は現在のコンテキストに存在しません」というエラーが表示されます。実際のgetModulesAtCurrentSlotメソッドは別の.csファイルにありますので、Iveはdba.getModulesAtCurrentSlot ...メソッドを参照するために使用しましたが、まだそれらのエラーが発生しています。
.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();
}
エラー
ありがとうございました。上の更新されたコードを見てください。私はまだエラーが発生しています。 timeslotIntとDayを定義する必要がありましたか? –
@DavidCravenあなたは 'dba'変数も定義しましたか?私はあなたのコードでそれが表示されません。また、あなたが得ている新しい完全なエラーメッセージは何ですか? – ChaseMedallion
ページ上部に私が持っているもの:Qsis.App_Codeを使う;このファイルには、getModulesAtCurrentSlotメソッドを含むcsファイル 'DBAccess'が含まれています。同じエラーメッセージは現在のコンテキストでは 'module'だけ存在しません。私はgetModulesAtCurrentSlotのコードを追加しました。 :) –