Элементы комбинированного списка на основе данных других выбранных элементов комбинированного списка SQL База данных сервера - PullRequest
1 голос
/ 22 апреля 2020

У меня есть два поля со списком, в первом из которых есть категории, которые я заполняю из SQL базы данных сервера. Хитрость заключается в том, что во втором поле со списком отображаются только элементы из БД, связанные с выбранной категорией из первого поля со списком.

Здесь мой код SQL:

IF @ActionType = 'FetchDataCBOCity'  
BEGIN  
    SELECT DISTINCT ID_City, Name_City 
    FROM City
END

IF @ActionType = 'FetchDataCBOState'  
BEGIN  
    SELECT ID_State, Name_State 
    FROM State 
END

Вот мой C# код:

ConnectionTCP.CboFetchData(new List<string> { "FetchDataCBOCity", spName }, "ID_City", "Name_City", comboBox1);
ConnectionTCP.CboFetchData(new List<string> { "FetchDataCBOState", spName }, "ID_State", "Name_State", comboBox2);


 // CBO Fetch Data in db
        public static void CboFetchData( List<string> dataList, string valueMember, string displayMember, ComboBox cbo )
        {
            try
            {
                string phrase = "CBOFETCHDATA" + ">";
                foreach (var data in dataList)
                {
                    phrase += data + ">";
                }

                byte[] message = Encoding.ASCII.GetBytes(phrase.TrimEnd('>'));
                stream.Write(message, 0, message.Length);

                var buffer = getData(tcpClient);

                cbo.DataSource = DataFormatter.DeserializeData(buffer);
                cbo.ValueMember = valueMember;
                cbo.DisplayMember = displayMember;
            }
            catch (Exception e)
            {
                MessageBox.Show("Error: " + e.Message, Client.nameApp, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Спасибо

1 Ответ

0 голосов
/ 22 апреля 2020

Полагаю, проще всего будет использовать DataSet с соответствующими DataTable s, но вы можете создавать источники данных, связанные

// Declare combo items
public class ParentInfo
{
    int Id {get; set;}
    string Display {get; set;}
}

public class ChildInfo
{
    int Id {get; set;}
    int ParentId {get; set;}
    string Display {get; set;}
}

// Load lists
List<ParentInfo> _parents;
List<ChildInfo> _children;
// . . . 
// Set parent combo, this one is not changing
cboParents.ValueMemeber = "Id";
cboParents.DisplayMemeber = "Display";
cboParents.DataSourse = _parents;

// . .  . . . 
// Change children for different parents
void OnParent_SelectedIndexChanged( . .  . .)
{
    if (cboParents.SelectedInfex = -1)
    {
        cboChildren.DataSource = null;
        return;
    }
    cboChildren.ValueMemeber = "Id";
    cboChildren.DisplayMemeber = "Display";
    ParentInfo currentP = (ParentInfo)cboParents.SelectedItem;
    cboChildren.DataSourse = _children.Where(c => c.ParentId == currentP.Id).ToList();

}



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