повторяющиеся значения в строке: нужна помощь с логикой - PullRequest
1 голос
/ 27 июня 2011

DataTable «dtTypeId» в следующем коде возвращает 2 столбца Имена типов и идентификаторы как: -

TypeId TypeName
1      Type1  
2      Type2
3      Type3

Проблема заключается в том, что в поле со списком есть только 2 элемента, которые отмечены галочкой, т.е.«Тип1» и «Тип2», но в тексте Radcombobox он отображает текст

как: -

Тип1, Тип1, Тип1, Тип1, Тип2, Тип2, Тип2, Тип2.Я хочу, чтобы текст поля со списком был 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;
                        }

                    }

                }

@ Болу: Я следовал вашему подходу, но он не работает правильно. Сейчас он отображает текст в выпадающем списке как type1type1, type1type1, type1type1,, type1type1,, type2type2,, type2type2,, type2type2,, type2type2,

@ bOLU
, что выдает ошибку в этой строке ... checkedTextType + = checkedTextType == string.Empty?lblTypeNames.Text : "," + lblTypeNames.Text;там написано "Неожиданный персонаж": 1018 *

1 Ответ

1 голос
/ 27 июня 2011

При быстром взгляде на ваш код я вижу следующие проблемы: вам нужно обновить эти значения меток / флажков в вашем внутреннем цикле 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...