2015-07-03 6 views
0

Я сделал код, который проверяет, существует ли в моем DataGrid определенный элемент. Если элементы уже добавлены в DataGrid, код показывает всплывающее окно к пользователю. Это код:Как проверить, существует ли элемент в DataGrid

if (grid.Items.Count > 0) 
        { 
         for (int i = 0; i < grid.Items.Count; i++) 
         { 

         if (((Teams.Club_Information)grid.Items[i]).name == reader["name"].ToString()) 
         { 
           MessageBox.Show("La squadra è già stata inserita!"); 
          } 
          else 
          { 
           MainWindow.AppWindow.Squadre_DataGrid.Items.Add(new Teams.Club_Information 
           { 
            name = reader["name"].ToString(), 
            code = reader["code"].ToString(), 
            shortName = reader["shortName"].ToString(), 
            squadMarketValue = reader["SquadMarketValue"].ToString() 
           }); 
          } 
         } 
        } 
        else 
        { 
         MainWindow.AppWindow.Squadre_DataGrid.Items.Add(new Teams.Club_Information 
         { 
          name = reader["name"].ToString(), 
          code = reader["code"].ToString(), 
          shortName = reader["shortName"].ToString(), 
          squadMarketValue = reader["SquadMarketValue"].ToString() 
         }); 
        } 

В первом состоянии я проверяю, если есть строка в DataGrid, если условие истинно, то я перебирать элемент DataGrid. Теперь проблема в том, что я сравниваю элемент сетки с атрибутом «имя» читателя. reader - это переменная, считываемая элементом результата запроса (sqlite). Есть еще один способ проверить имя столбца моего DataGrid, если элемент уже добавлен?

ответ

1

Ваши товары имеют тип «Teams.Club_Information», но вы сравниваете их с читателем ["name"], который является строкой. Если вы не написали метод Equals, который сравнивает значение Club_Information.name с строкой, сравнение всегда будет терпеть неудачу.

Попробуйте вместо этого:

if (((Teams.Club_Information)grid.Items[i]).name == reader["name"]) 
+0

Я не могу видеть .name переменного в состоянии –

+0

Вам нужен способ, чтобы сравнить читатель ["name"] для вашего объекта Club_Information. Рассматривали ли вы добавление общедоступного свойства Name в свой класс Club_Information, который будет показывать значение имени? Похоже, что в настоящее время у вас нет способа фактически сравнить имя вашего Клуба с именем, которое вы получаете в своем читателе. – Wibbler

+1

просто отбрасывает объект до фактического типа: 'var item = (Teams.Club_Information) grid.Items [i]; Если (item.name == reader ["name"]) ' – Liero

1

Вы можете сделать что-то вроде этого

 if(grid.Items.Contains(reader["name"])) 
     { 
     MessageBox.Show("team already added"); 
     } 
     else 
     { 
       MainWindow.AppWindow.Squadre_DataGrid.Items.Add(new Teams.Club_Information 
       { 
        name = reader["name"].ToString(), 
        code = reader["code"].ToString(), 
        shortName = reader["shortName"].ToString(), 
        squadMarketValue = reader["SquadMarketValue"].ToString() 
       }); 
     } 
+0

Решение кажется хорошим, но если я добавлю то же значение, что и сообщение, а затем условие не соответствует действительности, почему? –

+0

Решение неверно. reader ["name"] никогда не является элементом – Liero

1
var name = reader["name"]; 
var isNamePresent = grid.Items 
    .Cast<Teams.Club_Information>() 
    .Any(item => item.name == name); 

if (isNamePresent) ... else ... 
+0

фамилия, после того, как равенства подчеркнуты красным цветом. С чем следует заменить фамилию? Может быть, переменное имя структуры ClubInformation? или с параметром имени читателя? –

+0

Какой компилятор говорит? – Liero

+0

У меня есть изменение 'item.Name' на' item.name' в моем ответе. BTW, intelli sense очень полезно – Liero

Смежные вопросы