为什么我不能在C#中将项目添加到DataGrid中



我正在尝试向DataGrid动态添加新记录。我使用HashSet来防止重复。但当我想将对象从HashSet添加到ObservableCollection时,我会得到错误:

无法将带有[]的索引应用于类型为"System.Collections.Generic.IEnumerable<gt;。

我已经实现了IEnumerable

AdminWindow.xaml.cs类中的构造函数:

public AdminWindow()
{
InitializeComponent();
ObservableCollection<Alert> alertToDataGrid = new ObservableCollection<Alert>();

for (int i = 0; i < Alert.alerts.Count; i++)
{
alertToDataGrid.Add(Alert.alerts[i]); //Here is the issue
}
AlertTable.ItemsSource = alertToDataGrid;
}

Alert类:

public class Alert : IEnumerable<Alert>
{
private string id;
private DateTime date;
private string email;
private string nameOfAlert;
private string typeOfAlert; // will be enum later
public static HashSet<Alert> alerts = new HashSet<Alert>();

public override string ToString()
{
return id + "n" + Date+  "n" + email + "n" + nameOfAlert + "n" + typeOfAlert;
}

public override bool Equals(object obj)
{
return obj is Alert alert &&
id == alert.id &&
Id == alert.Id;
}

public override int GetHashCode()
{
return HashCode.Combine(id, Id);
}
// Tried just to return Enumerator
public IEnumerator<Alert> GetEnumerator()
{
foreach (Alert alert in alerts)
{
yield return alert;
}
}

IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}

public Alert(string id, DateTime date , string email, string nameOfAlert, string typeOfAlert)
{
this.Id = id;
this.Date = date;
this.Email = email;
this.NameOfAlert = nameOfAlert;
this.TypeOfAlert = typeOfAlert;
}

public string Id { get => id; set => id = value; }
public string Email { get => email; set => email = value; }
public string NameOfAlert { get => nameOfAlert; set => nameOfAlert = value; }
public string TypeOfAlert { get => typeOfAlert; set => typeOfAlert = value; }
public DateTime Date { get => date; set => date = value; }
}

您也可以尝试

foreach (Alert alert in Alert.alerts) {
alertToDataGrid.Add(alert);
}

请参阅如何通过哈希集进行枚举?有关更多详细信息,

如前所述,不能对HashSet使用索引。如果你坚持使用HashSet,你可以试试alertToDataGrid.Add(Alert.alerts.ElementAt(i));。您需要包含System.Linq

不能使用[],即HashSet上的索引运算符,因为它是无序的数据结构,不支持索引。因此,它不是关于DataGrid,而是关于HashSet,而不是for循环。请使用foreach循环来迭代HashSet或任何其他不支持索引的IEnumerable

最新更新