Дочерний Cobobox возвращает значение Null, если поле со списком DataValue не существует в дочерней таблице (LINQ) - PullRequest
2 голосов
/ 25 мая 2020

информация

у меня есть 3 таблицы

tblCountry

enter image description here

tblStateName

enter image description here

tblState

enter image description here

tblState Дочерний из tblStateName (StateName_ID) (Для лучшей обработки)

tblState Дочерний из tblCountry (Country_ID) (Каскадировать все знают это)

я создаю 1 форма с двумя комбинированными списками

enter image description here

я использую этот код для загрузки 2 комбинированных списков DataValue

    private void Form01_Load(object sender, EventArgs e)
    {
        //Load CountryComboBox Source from Table01
        using (UnitOfWork db = new UnitOfWork())
        {
            // At first assign properties DisplayMember and ValueMember.
            cmbCountry.DisplayMember = "Country";
            cmbCountry.ValueMember = "Country_ID";

            // And then assign DataSource property of the CountryComboBox .
            cmbCountry.DataSource = db.CountryRepository.Get();
        }
    }

    //Load StateComboBox From Table02
    private void cmbCountry_SelectedIndexChanged(object sender, EventArgs e)
    {
        string selectedValue = cmbCountry.SelectedValue.ToString();

        using (UnitOfWork db = new UnitOfWork())
            if (!string.IsNullOrEmpty(selectedValue))
            {
                // At first assign properties DisplayMember and ValueMember.
                cmbState.DisplayMember = "StateName";
                cmbState.ValueMember = "State_ID";
                // And then assign DataSource property of the cmbState.
                var result = (from state in db.StateRepository.GetNameIDByFilter(selectedValue)
                                              join stateName in db.StateNameRepository.Get() on state.StateName_ID equals stateName.Statename_ID

                                              select new
                                              {
                                                  State_ID = state.State_ID,
                                                  StateName = stateName.StateName
                                              }).ToList();

                cmbState.DataSource = result;
            }

после загрузки формы я вижу этот результат

enter image description here

если я выберу Country01, я увижу 4 Результат в cmbState (все хорошо и работает нормально)

enter image description here

MyProblem

но если я выберу «Country02» (это Value не дочерний элемент в tblState), но я вижу сначала Value Из tblState как это

enter image description here

Что мне нужно?

как я могу выбрать Country02 и Видите Null в cmbState? или лучше (вернуть Null, если Country_ID не существует в таблице состояний) и cmbState равно Null

(SRY For My bad Engli sh)

1 Ответ

1 голос
/ 27 мая 2020

Вы должны очистить cmbState после перезагрузки данных, если result равно null или пусто , как в следующем коде:

if(result == null || result.Count == 0)
{
 cmbState.DataSource = null;
 cmbState.DataBindings.Clear();
}else
{
 cmbState.DataSource = result;
}

Надеюсь, вы найдете это полезным.

...