Изящная вставка предмета в возвращаемый список - PullRequest
0 голосов
/ 17 февраля 2019

Попытка добавить элемент «Выбрать один» или «» к результату, возвращенному из Dapper, чтобы я мог отобразить его в качестве отправной точки в DropDownList.

Я пробовал;

using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MfgDataCollector"].ToString()))
        {
            List<Zone> Zonelist = conn.Query<Zone>("GetZone", commandType: CommandType.StoredProcedure).ToList<Zone>();

            Zonelist.Add(" ");

            CB_Zones.DataSource = Zonelist;
            CB_Zones.DisplayMember = "ZoneName";
            CB_Zones.ValueMember = "ZoneID";
        }

, но в нем говорится, что я не могу преобразовать 'string' в 'Metrics_Data.Zone' (список, который я возвращаю)

Следующий код прекрасно работает с DropDown,но когда я изменяю элемент управления на «DropDownList», он не работает, я знаю его, потому что он не позволяет вводить данные, отличные от определенного списка.

            using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MfgDataCollector"].ToString()))
        {
            List<Zone> Zonelist = conn.Query<Zone>("GetZone", commandType: CommandType.StoredProcedure).ToList<Zone>();


            CB_Zones.DataSource = Zonelist;
            CB_Zones.DisplayMember = "ZoneName";
            CB_Zones.ValueMember = "ZoneID";

            CB_Zones.Text = "";
        }
    }

Как мне добавить «Выбрать один»"или" "в список исключений без необходимости добавлять это в базу данных.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019
    using (SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MfgDataCollector"].ToString()))
    {
        List<Zone> Zonelist = conn.Query<Zone>("GetZone", commandType: CommandType.StoredProcedure).ToList<Zone>();

        Zonelist.Insert(0, new Zone() { ZoneID = -1 , ZoneName = "Select one..." });

        CB_Zones.DataSource = Zonelist;
        CB_Zones.DisplayMember = "ZoneName";
        CB_Zones.ValueMember = "ZoneID";

        CB_Zones.Text = "";
    }
0 голосов
/ 18 февраля 2019

Быстрый способ решить эту проблему - добавить псевдообъект с неверным идентификатором в начале списка перед привязкой данных, например:

var pseudoZone = new Zone() { ZoneName = "Select one...", ZoneID = -1 };
Zonelist.Insert(pseudoZone, 0);
CB_Zones.DataSource = Zonelist;
CB_Zones.DisplayMember = "ZoneName";
CB_Zones.ValueMember = "ZoneID";

Если по какой-либо причине вы не можете создатьпсевдообъект, вы можете создать новый список с пустой записью и требуемыми данными из списка зон, например,

var pseudoZone = Tuple.Create("Select one...", -1);
var items = new Tuple<string, int>[]{ pseudoZone }
    .Union(Zonelist)
    .ToArray();
CB_Zones.DataSource = items;
CB_Zones.DisplayMember = "Item1";
CB_Zones.ValueMember = "Item2";
...