Web ページにパネルのプロファイル リストがあります。アイテムのリストに行が含まれているように、複数の小さなパネルが含まれています。ここの項目はプロファイルです。各プロファイルは実際には小さなパネルのSingleProfileで、チェックボックスが内側にあります。チェックボックスは、同じアイテムを見つけるために使用されるIDを持っているため、ここではコアです。
このページには、別の同様の大きなパネルもあります。最初のパネルには存在しない項目のみを 2 番目のパネルに追加する必要があります。したがって、タスクは、最初のパネルに表示されていないプロファイルのみを 2 番目のパネルに表示することです。これは、両方のリストのチェックボックスのIDを使用してチェックされます。
2 番目のパネルで新しく追加されたプロファイルが最初のパネルに既に存在するかどうかを確認するために、 Controls[]プロパティを介して最初のパネルの各項目の ID プロパティにアクセスしようとしました。私はサイクルでそれを行います:
if (ProfilesPanel1.Controls.Count > 0)
{
for (int i = 0; i <= ProfilesPanel1List.Controls.Count - 1; i++)
{
//label1.Text += " "+Convert.ToString(sqlReader["chain_id"]); //Bug #2 - see Stored Procedure description
cbx1 = new CheckBox();
cbx1 = (CheckBox)ProfilesPanel1List.Controls[i].Controls[1]; //Bug #1 - here the Exception occurs
if (cbx1.ID == Convert.ToString(sqlReader["chain_id"])) //if profile already exists in the first panel
{
//Do not add this profile to the second panel
}
}
}
「バグ #1」と記された行で例外「System.ArgumentOutOfRangeException」が発生します。
ストアド プロシージャから ID を取得する sqlReader を使用します。ストアド プロシージャは、SQL Server で正常に動作します。しかし、sqlReader の値を Web ページのラベルに出力すると (コードのコメントを参照)、「1 1 2 2 3 3 4 4 5 5」のように各値が 2 倍になります。