2017-04-22 3 views
0

以下のコードでは、選択した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) + "&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(); 
    } 

エラー

enter image description here

答えて

1

変数とパラメータ名を混同しているようです。

関数getModulesAtCurrentSlotには3つのパラメータがあり、それぞれに値を渡す必要があります。渡す値は、関数のパラメータと同じ名前の変数である必要はなく、同じ型でなければなりません。

関数では、timeSlotIntまたはDayという変数が定義されていないため、これらの値を使用することはできません。

+0

ありがとうございました。上の更新されたコードを見てください。私はまだエラーが発生しています。 timeslotIntとDayを定義する必要がありましたか? –

+0

@DavidCravenあなたは 'dba'変数も定義しましたか?私はあなたのコードでそれが表示されません。また、あなたが得ている新しい完全なエラーメッセージは何ですか? – ChaseMedallion

+0

ページ上部に私が持っているもの:Qsis.App_Codeを使う;このファイルには、getModulesAtCurrentSlotメソッドを含むcsファイル 'DBAccess'が含まれています。同じエラーメッセージは現在のコンテキストでは 'module'だけ存在しません。私はgetModulesAtCurrentSlotのコードを追加しました。 :) –

関連する問題