【问题标题】:duplicate values in string: need help with the logic字符串中的重复值:需要逻辑帮助
【发布时间】:2011-06-27 22:36:51
【问题描述】:

以下代码中的数据表“dtTypeId”返回2列类型名称和ID为:-

TypeId TypeName
1      Type1  
2      Type2
3      Type3

问题在于,在组合框中,只有 2 个项目被选中,即“Type1”和“Type2”,但在 Radcombobox 的文本中显示文本

作为:-

Type1,Type1,Type1,Type1,Type2,Type2,Type2,Type2。 我希望组合框的文本为 Type1,Type2(仅那些被选中的)。为什么会有这些重复值?

下面的逻辑有什么问题?请帮忙..谢谢..

foreach (RadComboBoxItem item1 in radComboBoxTypes.Items)
                {

                    Label lblTypeId = item1.FindControl("lblTypeId") as Label;
                    CheckBox chkType = item1.FindControl("chkType") as CheckBox;
                    Label lblTypeNames = item1.FindControl("lblTypeNames") as Label;
                    bllMyClass objMyClass = new bllMyClass();
                    objMyClass.TextID = int.Parse(lblTextID.Text);
                    DataTable dtTypeId = new DataTable();
                    dtTypeId = objMyClass.GetTypesByTextID();
                    if (dtTypeId.Rows.Count > 0)
                    {

                        foreach (RadComboBoxItem item2 in radComboBoxTypes.Items)
                        {
                            for (int i = 0; i < dtTypeId.Rows.Count; i++)
                            {
                                if (lblTypeId.Text == dtTypeId.Rows[i]["TypeId"].ToString())
                                {
                                    chkType.Checked = true;
                                    checkedTextType += lblTypeNames.Text + ", ";
                                }
                            }

                            if (chkType.Checked == true)
                            {

                                checkedTextType += lblTypeNames.Text + ", ";

                            }
                            radComboBoxTypes.Text = checkedTextType;
                        }

                    }

                }

@Bolu:我按照你的方法,但它不能正常工作..它现在在组合框中显示文本为 type1type1, , type1type1, , type1type1, , type1type1, , type2type2, , type2type2, , type2type2, , type2type2,

@bOLU
它在这一行给出错误...checkedTextType += checkedTextType==string.Empty?lblTypeNames.Text:", " + lblTypeNames.Text ;它说“意外字符':'”

【问题讨论】:

  • @Bolu :: 我已经尝试过了并修改了代码..只是没有得到火花:(

标签: c# asp.net telerik


【解决方案1】:

快速浏览一下您的代码,我可以发现以下问题:您需要在内部 foreach 循环中更新这些标签/复选框值,或者在找到第一个匹配项时才中断

foreach (RadComboBoxItem item1 in radComboBoxTypes.Items)//for item1
{
      Label lblTypeId = item1.FindControl("lblTypeId") as Label; //lblTypeId.Text=="1"
      Label lblTypeNames = item1.FindControl("lblTypeNames") as Label; //lblTypeNames.Text=="Type1"
      .....
      foreach (RadComboBoxItem item2 in radComboBoxTypes.Items)//item1 || <item2>
      {
             for (int i = 0; i < dtTypeId.Rows.Count; i++)
             {
                  if (lblTypeId.Text == dtTypeId.Rows[i]["TypeId"].ToString())//true || <true>
                  {
                      chkType.Checked = true;
                      checkedTextType += lblTypeNames.Text + ", ";//checkedTextType=="Type1" || <checkedTextType=="Type1, Type1, Type1">
                  }
              }

              if (chkType.Checked == true)//true || true
              {
                   checkedTextType += lblTypeNames.Text + ", "; //checkedTextType =="Type1, Type1" || <checkedTextType =="Type1, Type1, Type1, Type1">
              }

       }
}

//Then when out loop goes to item2, you will have "Type2, Type2, Type2, Type2" added to your checkedTextType

同样,使用调试可以轻松识别问题。

编辑:你应该做什么:

  //pseudo code
    foreach (RadComboBoxItem item1 in radComboBoxTypes.Items)
    {
              Label lblTypeId = item1.FindControl("lblTypeId") as Label;
              CheckBox chkType = item1.FindControl("chkType") as CheckBox;
              Label lblTypeNames = item1.FindControl("lblTypeNames") as Label;
              bllMyClass objMyClass = new bllMyClass();
              objMyClass.TextID = int.Parse(lblTextID.Text);
              DataTable dtTypeId = new DataTable();
              dtTypeId = objMyClass.GetTypesByTextID();
              for (int i = 0; i < dtTypeId.Rows.Count; i++)
              {
                    if (lblTypeId.Text == dtTypeId.Rows[i]["TypeId"].ToString())
                    {
                       chkType.Checked = true;
                       checkedTextType += checkedTextType==string.Empty?lblTypeNames.Text:", " + lblTypeNames.Text ; 
                       break;                                 
                    }
              } 
     }
     radComboBoxTypes.Text = checkedTextType;

【讨论】:

  • 我遵循了您的方法,但它无法正常工作。它现在将组合框中的文本显示为 type1type1, , type1type1, , type1type1, , type1type1, , type2type2, , type2type2, , type2type2, , type2type2,
  • 你需要用我上面的代码替换你所有的代码,所以你应该只有1个foreach循环。还要检查你的 GetTypesByTextID() 函数,它应该只返回 1 条记录?
  • 它在这一行给出错误...checkedTextType += checkedTextType==string.Empty?lblTypeNames.Text:", " + lblTypeNames.Text ;它说“意外字符':'”
  • GetTypesByTextID() 返回值为 Type1、Type2 的数据表,即具有这两个值及其 ID 的数据表
  • 嗨,在这种情况下,只需添加一个break;对于错误,只需通过重新输入将 替换为:(看起来相同,但它们不同)。或者您可以重新复制上面的代码来替换您的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-02
  • 2015-10-20
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多