ページでグローバル変数としてリストを作成しました。
public static List<LinkButton> allControlsLinkButtonSalles = new List<LinkButton>();
during と呼ばれる関数ではPage_Load
、次のような要素をいくつか追加します。
foreach (var childControl in allControlsLinkButton)
{
if (childControl.CssClass == "linkButtonSalleActive" || childControl.CssClass == "linkButtonSalle")
{
allControlsLinkButtonSalles.Add(childControl);
}
}
その直後、これを行うと:
foreach (LinkButton value in allControlsLinkButtonSalles)
{
literal2.Text += " <br /> Text " + value.Text;
}
そして、必ず3つの要素が現れます。ただし、これを実行しようとすると:
literal2.Text += " First element " + allControlsLinkButtonSalles.First().Text;
エラーが発生します。なぜそれが可能ですか?
メッセージは次のとおりです。
説明 : 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.InvalidOperationException: シーケンスに要素が含まれていません。
ソース エラー:
ライン 605 : } ライン 606 : ライン 607 :literal2.Text += "First" + allControlsLinkButtonSalles.First().Text; ライン 608 : ライン 609 : //allControlsLinkButtonSalles[0].CssClass = "linkButtonSalleActive"; スタックトレース:
[InvalidOperationException: シーケンスに要素が含まれていません。] System.Linq.Enumerable.First (IEnumerable `1 source) +269 test2MasterPage.Page_init() in c:\Users....\Documents\Visual Studio 2012\WebSites\test1\ test2MasterPage.aspx.cs:607 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(オブジェクト送信者、EventArgs e) +9807957 System.Web.UI.Control.OnInit(EventArgs e) +92 System.Web.UI.Page.OnInit( EventArgs e) +12 System.Web.UI.Control.InitRecursive(コントロールの名前付けコンテナー) +134 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +489
完全なコードは次のとおりです。
public static List<DataTable> ListTable = new data().GetTable();
public static List<string> SallesList = new data().SallesListCreation(ListTable[0]);
//DataTable dt = new data().
public static int Load_Counter = 0;
List<Button> allControlsButton = new List<Button>();
public static List<LinkButton> allControlsLinkButtonSalles = new List<LinkButton>();
List<LinkButton> allControlsLinkButtonAffichages = new List<LinkButton>();
List<LinkButton> allControlsLinkButtonSemaine = new List<LinkButton>();
protected void Page_Load(object sender, EventArgs e)
{
literal2.Text += "<br /> counter : " + Load_Counter.ToString();
DateTime today = DateTime.Now;
string sToday = DateTime.Now.ToString("dd/MM/yyyy");
string finDate = today.AddDays(+6).ToString("dd/MM/yyyy");
literaltest.Text = "Semaine du " + sToday + " au " + finDate;
PlaceHolder1.Controls.Add(new LiteralControl("<br /><br /><br /> kyofu<br /><br />"));
foreach (string sallesel in SallesList)
{
PlaceHolder1.Controls.Add(CreateLinkButton(sallesel + "lkbtn", sallesel, "linkButtonSalle"));
}
Page_init();
}
protected void Page_init()
{
List<LinkButton> allControlsLinkButton = new List<LinkButton>();
GetControlList<LinkButton>(Page.Controls, allControlsLinkButton);
DateTime today = DateTime.Now;
string sToday = DateTime.Now.ToString("dd/MM/yyyy");
// the list of controllers is filled
foreach (var childControl in allControlsLinkButton)
{
if (childControl.CssClass == "linkButtonSalleActive" || childControl.CssClass == "linkButtonSalle")
{
allControlsLinkButtonSalles.Add(childControl);
literal2.Text += " allControlsLinkButtonSalles " + childControl.Text;
}
if (childControl.CssClass == "linkButtonAffichage" || childControl.CssClass == "linkButtonAffichageActive")
{
allControlsLinkButtonAffichages.Add(childControl);
}
if (childControl.CssClass == "linkButtonSemaine" || childControl.CssClass == "linkButtonSemaineActive")
{
allControlsLinkButtonSemaine.Add(childControl);
SemaineSync(childControl);
}
}
literal2.Text += " taille " + allControlsLinkButtonSalles.Count();
//literal2.Text += " Text " + allControlsLinkButtonSalles[1].Text;
foreach (LinkButton value in allControlsLinkButtonSalles)
{
literal2.Text += " <br /> Text " + value.Text;
}
literal2.Text += " First " + allControlsLinkButtonSalles.First().Text;
ListFilmsBySalle(SallesList[0]);
}
private void GetControlList<T>(ControlCollection controlCollection, List<T> resultCollection)
where T : Control
{
foreach (Control control in controlCollection)
{
//if (control.GetType() == typeof(T))
if (control is T) // This is cleaner
resultCollection.Add((T)control);
if (control.HasControls())
GetControlList(control.Controls, resultCollection);
}
}