1

这一定很容易......但我还是一样被困住了。

这是问题所在:

在一个可能在任何新标准发明之前创建的 ASP.net 项目中,存在两个 HTML 列表框,我们称它们为listBox AlistBox 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 中选定的项目。

谢谢。

4

2 回答 2

0

我认为在您必须考虑客户端验证之前在服务器端进行此类验证不是一个好主意我建议您使用一个简单的 JavaScript 函数来过滤第二个列表并删除重复项,您可以在文档就绪功能上执行此操作,因为我认为您每次添加记录时都会重新加载页面

$(document).ready(function() {
  var prev;
$('select[name=listBoxB] option').each(function() {
    if (this.text == prev)
     {
        $(this).remove();
     }
    prev= this.text;
});
});
于 2013-08-23T03:56:48.087 回答
0

为了使用标准的服务器端技术,您必须使用 runat="server" 声明选择标记。其余的你可能自己弄清楚,但我发现http://www.aspnettutorials.com/tutorials/controls/htmlselect-control-csharp/是一个相当简单的例子,可以做你需要做的最常见的事情。

于 2013-08-23T03:52:43.143 回答