С# с SQL: заполнение нескольких полей со списком, каждое из которых имеет разные столбцы одной и той же таблицы

как указано в заголовке, я был бы признателен за помощь в заполнении выпадающих списков разными столбцами одной и той же таблицы.

У меня нет настоящих исходных кодов, но я смог заполнить одно поле со списком чем-то вроде

SqlDataTable dt = new SqlDataTable();
SqlCommand comm = new SqlCommand(query, conn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = comm;
da.Fill(dt);
myCMB.DataSource = dt;
myCMB.DisplayMember = "display";
myCMB.ValueMember = "value;

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

myCMB.DataSource = new BindingSource(da, "Column_Name");

но при этом поле со списком будет заполнено каждой буквой первого элемента указанного столбца (т.е. если первый элемент в «Имя_столбца» имеет значение ABCD, мои параметры поля со списком будут A, B, C, D)

Итак, я попытался найти больше ответов, но не могу найти. есть ли более эффективный способ заполнения моих полей со списком или мне действительно нужно повторять по существу одни и те же строки кода для каждого из них? если кто-то может помочь, это было бы очень признательно.


person ohno.morty    schedule 27.09.2017    source источник
comment
Разве ты не можешь сделать как myCMB.DataSource = dt; myCMB.DisplayMember = "col1"; myCMB.ValueMember = "col2"; myotherCMB.DataSource = dt; myotherCMB.DisplayMember = "col3"; myotherCMB.ValueMember = "col4";   -  person Chetan Ranpariya    schedule 27.09.2017
comment
когда вы говорите разные столбцы одной и той же таблицы, это означает таблицу данных или таблицу sql.   -  person Amit Kumar Singh    schedule 27.09.2017
comment
Извиняюсь за поздний ответ, но я хотел бы поблагодарить @ChetanRanpariya за правильный ответ. Однако я не знаю, как отметить ваш комментарий как официальный ответ.   -  person ohno.morty    schedule 03.10.2017


Ответы (2)


Используйте копию datatable:

SqlDataTable dt = new SqlDataTable();
SqlCommand comm = new SqlCommand(query, conn);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = comm;
da.Fill(dt);

myCMB.DataSource = dt.Copy();


myCMB.DisplayMember = "display";
myCMB.ValueMember = "value;
person JMabee    schedule 27.09.2017

Попробуй это:

DataTable dt = new DataTable();
dt.Columns.Add("Value");
dt.Columns.Add("Display");

string query = @"SELECT ID AS ID, Description AS CODE FROM [Tender] ORDER BY ID";
SqlDataReader sqlReader = new SqlCommand(query, DB.SQLConnection).ExecuteReader();

while (sqlReader.Read())
{
    if (!string.IsNullOrEmpty(sqlReader["CODE"].ToString()))
        dt.Rows.Add(sqlReader["ID"].ToString(), sqlReader["CODE"].ToString());
}

cbPayment1.DisplayMember = "display";
cbPayment1.ValueMember = "value";
cbPayment1.DataSource = dt;
person Jaury Abreu    schedule 28.05.2019