簡體   English   中英

包含無法正常工作(檢查DataGrid中是否已存在元素)

[英]Contains not working properly (Check if an element already exists in 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)
});

注意: rdr是查詢的讀取器。 代碼,名稱和其他內容在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();

DataGrid的Items集合不包含字符串,因此Contains將始終返回false。

您將必須找到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)
     });
 }

也就是說,使用Teams集合屬性創建視圖模型是有意義的,例如

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

並將DataGrid的ItemsSource屬性綁定到Teams視圖模型屬性。 現在,您將找到現有的Team對象並立即在Teams集合中添加對象,而無需直接訪問DataGrid。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM