我怎样才能达到这种搜索条件?

时间:2012-02-25 10:47:13

标签: asp.net

我想实现一些搜索条件,如下所示我想以最佳方式制作,我该如何实现?

switch (e.CommandName)
{
   case "DRESS":
      chkItem.Items.Clear();
      chkItem.DataSource = cDressing.GetAllDressingDetail(cWebUtil.CurrClientID);
      chkItem.DataTextField = "Description";
      chkItem.DataValueField = "DressingID";
      chkItem.DataBind();
      CurrBtnMode = btnMode.Dressing;
      // ModalPopupExtender1.TargetControlID = ((Button)grdOrder.Rows[currItem.OrderItemID -1].FindControl("btnDress")).ID.ToString();

      if (currItem.DressingItems.Count > 0)
      {
         foreach(cOrderItemDressing itemDress in currItem.DressingItems )
         {
            // I want here to apply condtion for those chkItem object's DressingID exist in the itemDress objets's  DressingID should 
            // have checked state in checkbox list to be populated.
         }
      }

      ModalPopupExtender1.Show();

1 个答案:

答案 0 :(得分:1)

您的目标是检查chkItem.ItemscurrItem.DressingItems集合中具有匹配项目的项目吗?我不确定这是否是你想要的,但你可以试试这个:

...
//uncheck all the items first (if you need it)
foreach (var item in chkItem.Items)
{
    item.Checked = false;   
}

foreach(cOrderItemDressing itemDress in currItem.DressingItems )
{

    bool chkItemFound = false;
    foreach (var item in chkItem.Items)
    {
        //if the item is found, make it checked
        if (item.DressingID == itemDress.DressingID)
        {
            item.Checked = true;
            chkItemFound = true;
            break;
        }
    }
}

我还没有测试过,所以如果你在使用它时遇到一些问题,请告诉我。

<强>更新

您问这是否是解决问题的最佳方式。我会说有更多优化的方法,但我想保持代码简单,只显示解决方案。 这可能就足够了,但这取决于每个集合包含的项目数。

我认为优化它的一种非常简单的方法是通过删除已经找到的项目来防止这么多项目比较(因为在进一步的比较中不需要它)。这样,集合可以在每次循环迭代时缩小,从而使其更快地工作。但是,您可能需要创建要修改的集合的副本才能访问其原始表单(并请注意,此阵列的分配可能需要一些时间)。 另一种方法是使用有序集合并为它们实现某种搜索算法。这将使搜索过程本身更快,但需要一些额外的时间来对集合进行排序(排序也可以通过以排序的形式创建集合来实现,因此以后不需要排序。)

可能还有其他一些方法,但它可能取决于应用程序其他部分的详细信息以及您希望它使用的数据量。