这一定很容易......但我还是一样被困住了。
这是问题所在:
在一个可能在任何新标准发明之前创建的 ASP.net 项目中,存在两个 HTML 列表框,我们称它们为listBox A和listBox B。通过 HTML,我的意思是他们使用 HTML 标签,而不是 ASP 标签:
<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。添加和删除按钮只使用插入或删除语句。这工作正常。
但是,有一个错误。即,您可以多次将列表框 A 中的数据添加到列表框 B 中。这不应该被允许。
我提出的解决方案的逻辑是这样的:
按下 Add 按钮后,将循环遍历 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 中选定的项目。
谢谢。