проверка наличия значений в сетке данных - PullRequest
0 голосов
/ 22 ноября 2018

Я работаю над проектом C #, который включает в себя WPF.Мне было интересно, могу ли я как-нибудь проверить, содержит ли моя сетка данных определенный элемент.

Например, у меня есть поле со списком , которого itemsSource является список объектов.Теперь, когда пользователь выбирает элемент из поля со списком и нажимает кнопку Before click

ниже в сетке данных (в том же окне), этот элемент отображается. After clicking

Я хочу запретить пользователю выбирать один и тот же элемент более одного раза и, например, поставить MessageBox с сообщением об ошибке.Как я могу это сделать?

Код

Это окно:

public partial class AvioWindowAddNEdit : Window
{
    Avio avio;
    public enum Stage { ADD, EDIT};
    Stage stage;

    public AvioWindowAddNEdit(Avio avio, Stage stage = Stage.ADD)
    {
        InitializeComponent();
        this.avio= avio;
        this.stage= stage;

        textboxCode.DataContext = avio;



        comboboxListofFlights.ItemsSource = Aplikacija.Instance.Flights;
        comboboxListofFlights.DataContext = avio;


        datagridListofFlights.ItemsSource = avio.ListofFlights;




        datagridListofFlights.ColumnWidth = new DataGridLength(1, DataGridLengthUnitType.Auto);

        if (stage== Stage.EDIT)
        {
            textboxCode.IsEnabled = false;
        }
    }
}

Кнопка, которая добавляет выбранный элемент в сетку данных:

private void btnAddFlight_Click(object sender, RoutedEventArgs e)
    {

        avio.ListOfFlights.Add(comboboxListOfFlights.SelectedItem as Flight);

    }

Класс Singleton для загрузки всех моих данных:

class Aplication
{
    public ObservableCollection<User> Users { get; set; }
    public ObservableCollection<Airport> Airports { get; set; }
    public ObservableCollection<Flight> Flights{ get; set; }
    public ObservableCollection<Avio> Avios { get; set; }

    public string LoggedInUser { get; set; }

    private static Aplication instance = new Aplication();

    public static Aplication Instance
    {
        get
        {
            return instance;
        }
    }

    private Aplication()
    {
        Users= new ObservableCollection<User>();
        Airports = new ObservableCollection<Airport>();
        Flights = new ObservableCollection<Flight>();
        Avios= new ObservableCollection<Avio>();
        FillInData(); //method where I filled in all of these ObservableCollections
    }
}

Мой класс:

public class Avio : ObservableObject, ICloneable
{
    //observableobject is an object where I implemented INotifyPropertyChanged
    private string code;

    public string Code
    {
        get { return code; }
        set { code= value; OnPropertyChanged("Code"); }
    }

    private ObservableCollection<Flight> listOfFlights;

    public ObservableCollection<Flight> ListOfFlights
    {
        get { return listOfFlights; }
        set { listOfFlights= value; OnPropertyChanged("ListOfFlights"); }
    }


    private bool active;

    public bool Active
    {
        get { return active; }
        set { active= value; OnPropertyChanged("Active"); }
    }

    public Avio()
    {
        active= true;
        ListOfFlights = new ObservableCollection<Flight>();
    }
    public Avio(string code)
    {
        active= true;
        ListOfFlights = new ObservableCollection<Flight>();
        Code= code;
    }
}

1 Ответ

0 голосов
/ 22 ноября 2018

Вы можете использовать ObservableCollection в качестве ItemsSource для вашей DataGrid.Таким образом, вы всегда будете иметь легкий доступ к данным через код.Изучите этот учебник в качестве отправной точки (здесь используется ListBox вместо DataGrid, но его легко адаптировать к DataGrid).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...