これは簡単なはずです...しかし、私は同じように立ち往生しています。
問題は次のとおりです。
おそらく新しい標準が発明される前に作成された ASP.net プロジェクトでは、2 つの HTML リスト ボックスが存在します。それらをlistBox AおよびlistBox Bと呼びましょう。HTML とは、ASP タグではなく HTML タグを使用することを意味します。
<select name="listBoxB" id = "listBoxB" size="15" >
<option>--------Selected Approvers--------</option>
<%
SQLDataFactory.WorkflowApproversGroupDetails SQLDFSelectedApprovers = new SQLDataFactory.WorkflowApproversGroupDetails();
DataTable dt1 = SQLDFSelectedApprovers.GetApproversGroupDetails(Request);
foreach (DataRow row1 in dt1.Rows)
{
if (row1["ID"].ToString().Equals(Request.Form["listBoxB"]))
Response.Write("<option selected value='" + row1["ID"].ToString() + "'>" + row1["EMPNONAME"].ToString() + "</option>");
else
Response.Write("<option value='" + row1["ID"].ToString() + "'>" + row1["EMPNONAME"].ToString() + "</option>");
}
dt1.Dispose();
%>
</select>
listBox B は実際にはデータベースからデータをフェッチするだけです。
listBox A には、より完全なデータ セットが含まれています (これもデータベース、別のテーブルからフェッチされます)。フォームを使用すると、ユーザーは [追加] ボタンと [削除] ボタンを使用して、A から B にデータを転送できます。[追加] ボタンと [削除] ボタンは、insert または delete ステートメントを使用するだけです。これはうまくいきます。
ただし、バグがあります。つまり、listBox A から listBox B に複数回データを追加できます。これは許可されるべきではありません。
提案されたソリューションの私のロジックは次のようになります。
[追加] ボタンを押すと、listBox B のすべての項目に対してループが実行されます。追加しようとしている項目が既に含まれている場合、データベースには何も追加されないため、listBox B には何も表示されません。新着。それ以外の場合は、項目がデータベースに追加され、listBox B のリストも更新されます。そのままステーを外します。
簡単に聞こえますが、十分ですよね?私はいくつかの思わぬ障害にぶつかりました。
両方のリスト ボックス項目 (A で選択された項目、B ですべての項目) を取得するにはどうすればよいですか?
Request.Form["listBox B"] を実行し、For ループを実行して、配列に追加しますか? そのためには、おそらく listBox B の項目数も必要になるでしょう。どうすればこれらのものを入手できますか?
また、LINQ はありません。私は .NET 2.0 しか使用できないので、A から選択したアイテムを B からのアイテムのリストと比較する他の方法を見つける必要があると思います。
int index = Array.FindIndex(itemB, delegate(string s) { return s.Equals(test); });
ここで、itemB は listBox B からの項目の配列であり、s は listBox A から選択された項目です。
ありがとう。