2015-08-25 2 views
0

Я хочу, чтобы проверить, если элемент уже присутствует в DataGrid, так что я сделал этот код:Содержит не работает должным образом (проверьте, если элемент уже существует в DataGrid)

if (MainWindow.AppWindow.Teams_DataGrid.Items.Contains(squadra)) 
{ 
    MessageBox.Show("Already present."); 
} 

но условие всегда ложно. Вставить значения в DataGrid следующим образом:

MainWindow.AppWindow.Teams_DataGrid.Items.Add(new 
{ 
     code = rdr.GetStringOrNull(7), 
     name = rdr.GetStringOrNull(6), 
     championship = rdr.GetStringOrNull(4), 
     shortName = rdr.GetStringOrNull(8), 
     squadMarketValue = rdr.GetStringOrNull(9) 
}); 

NB: РДР является читателем запроса. И код, имя и другие материалы являются обязательными в DataGrid Xaml, например:

Binding="{Binding Path = 'name'}" 

Почему состояние всегда ложное? Что я делаю неправильно?

ПОЛНЫЙ КОД:

string stm = @" SELECT * 
          FROM teams l 
          LEFT JOIN soccerseason s ON s.id = l.id 
          WHERE caption LIKE " + "'" + MainWindow.AppWindow.League.SelectedValue.ToString() + 
          "%' AND s.years = " + MainWindow.AppWindow.Season.SelectedValue.ToString(); 
      MySqlCommand cmd = new MySqlCommand(stm, database.Connection); 
      MySqlDataReader rdr = cmd.ExecuteReader(); 

      while (rdr.Read()) 
      { 
       string squadra = rdr.GetStringOrNull(6); 

       if (MainWindow.AppWindow.Teams_DataGrid.Items.Contains(squadra)) 
       { 
        MessageBox.Show("Squadra già inserita."); 
       } 
       else 
       { 
        MainWindow.AppWindow.Teams_DataGrid.Items.Add(new 
        { 
         code = rdr.GetStringOrNull(7), 
         name = rdr.GetStringOrNull(6), 
         championship = rdr.GetStringOrNull(4), 
         shortName = rdr.GetStringOrNull(8), 
         squadMarketValue = rdr.GetStringOrNull(9) 
        }); 
       } 
      } 
      rdr.Close(); 
+0

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

+1

Что такое 'squadra'? Вы действительно не показали нам достаточно кода, чтобы помочь нам помочь вам. –

+0

Являются ли оболочки одинаковыми между DataGrid.Items и значением squadra? –

ответ

1

Items коллекция вашего DataGrid не содержит строки, так Contains всегда будет возвращать ложь.

Вам нужно будет найти объект, в котором имущество name равно значению squadra. Однако это невозможно сделать с анонимным типом элемента, поэтому первое, что нужно сделать, это создать класс элемента, например. как это:

public class Team 
{ 
    public string Code { get; set; } 
    public string Name { get; set; } 
    public string Championship { get; set; } 
    public string ShortName { get; set; } 
    public string SquadMarketValue { get; set; } 
} 

Теперь вы бы добавить элементы, как это:

using System.Linq; 
... 

var squadra = rdr.GetStringOrNull(6); 

if (MainWindow.AppWindow.Teams_DataGrid.Items.Cast<Team>().Any(t => t.Name == squadra)) 
{ 
    MessageBox.Show("Squadra già inserita."); 
} 
else 
{ 
    MainWindow.AppWindow.Teams_DataGrid.Items.Add(new Team 
    { 
     Code = rdr.GetStringOrNull(7), 
     Name = squadra, 
     Championship = rdr.GetStringOrNull(4), 
     ShortName = rdr.GetStringOrNull(8), 
     SquadMarketValue = rdr.GetStringOrNull(9) 
    }); 
} 

Тем не менее, было бы целесообразно создать модель представления с набором имущества команды, например,

public ObservableCollection<Team> Teams { get; set; } 

и связать ItemsSource свойство DataGrid в модельному собственности Teams зрения. Теперь вы найдете существующие объекты Team и добавите их в коллекцию Teams, без прямого доступа к DataGrid.

+0

Хорошее решение, но я получаю эту ошибку, когда добавляю второе значение: System.InvalidCastException: Невозможно наложить объект типа '<> f__AnonymousType1' 5 [System.String, System.String, System.String, System.String, System.String] 'для типа' Team '. на этой строке: if (MainWindow.AppWindow.Teams_DataGrid.Items.Cast () .Any (t => t.Name == squadra)) – Bender

+0

Потому что вы забыли заменить 'Items.Add (new {... }) 'by' Items.Add (новая команда {...}) '. – Clemens

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