精巧的工具将项目插入返回的列表

时间:2019-02-17 18:54:32

标签: c# dapper

尝试在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 = "";
        }
    }

如何将“选择一个”或“”添加到dapper列表中,而不必将其添加到要从中提取的Database Dapper中?

2 个答案:

答案 0 :(得分: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";

答案 1 :(得分: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 = "";
    }