这一定很容易......但我只是坚持不变。
问题在于:
在一个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. “添加”和“删除”按钮只使用insert或delete语句。 这很好用。
然而,有一个错误。也就是说,您可以多次将listBox A中的数据添加到listBox 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中的选定项。
感谢。
答案 0 :(得分:0)
您必须使用runat =“server”声明select标记才能使用标准服务器端技术。你可以自己弄清楚其余部分,但我发现http://www.aspnettutorials.com/tutorials/controls/htmlselect-control-csharp/是一个相当简单的例子,可以做你需要做的最常见的事情。
答案 1 :(得分:0)
在您不得不考虑客户端验证之前,我不认为在服务器端进行此类验证不是一个好主意 我建议您使用一个简单的JavaScript函数来过滤第二个列表并删除重复项,您可以在文档就绪函数上执行它,因为我认为每次添加记录时都会重新加载页面
$(document).ready(function() {
var prev;
$('select[name=listBoxB] option').each(function() {
if (this.text == prev)
{
$(this).remove();
}
prev= this.text;
});
});