[英]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.