Dapper将项目插入到返回的列表中

问题描述 投票:-1回答:2

尝试将“Select One”或“”项添加到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',但是当我将Control更改为'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 = "";
        }
    }

如何在短小程序列表中添加“选择一个”或“”,而不必将其添加到数据库小工具中?

c# dapper
2个回答
0
投票

解决此问题的快速方法是在绑定数据之前在列表的开头添加一个带有无效id的伪对象,例如:

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";

0
投票
    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 = "";
    }
© www.soinside.com 2019 - 2024. All rights reserved.