如何使用C#检索/比较HTML列表框中的项目

时间:2013-08-23 03:22:44

标签: c# asp.net .net-2.0

这一定很容易......但我只是坚持不变。

问题在于:

在一个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中的选定项。

感谢。

2 个答案:

答案 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;
});
});