Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何向绑定到实体的combobox添加新项?_C#_Entity Framework_Binding_Combobox_Row - Fatal编程技术网

C# 如何向绑定到实体的combobox添加新项?

C# 如何向绑定到实体的combobox添加新项?,c#,entity-framework,binding,combobox,row,C#,Entity Framework,Binding,Combobox,Row,由C#生成的设计类: 然后我将BindingSource(usepurposeBindingSource)绑定到实体: usepurposeBindingSource.DataSource = mydatabaseEntities.usepurposes; 我无法向usepurposeComboBox添加新行,因为它已绑定。有解决方法吗?我假设您想要添加第一个项目,例如有时称为“选择一个”,就好像您想要实时数据一样,您应该只查看数据来自何处,然后将更多项目添加到“表”中 此.usepurpos

由C#生成的设计类:

然后我将BindingSource(usepurposeBindingSource)绑定到实体:

usepurposeBindingSource.DataSource = mydatabaseEntities.usepurposes;

我无法向usepurposeComboBox添加新行,因为它已绑定。有解决方法吗?

我假设您想要添加第一个项目,例如有时称为“选择一个”,就好像您想要实时数据一样,您应该只查看数据来自何处,然后将更多项目添加到“表”中

此.usepurposeBindingSource
是一个对象。。。为什么不在它绑定之前加入它呢

如果是
列表
就可以了

this.usepurposeBindingSource.Insert(0, new T() {
    Name = "Choose one",
    Id = ""
});
然后
Bind()
it

记住要验证,因为它是一个字符串,不会是您想要的对象


这是有效的:

List<MyObject> usepurposeBindingSource { get; set; }

private void FillUpData()
{
    // Simulating an External Data
    if (usepurposeBindingSource == null || usepurposeBindingSource.Count == 0)
    {
        this.usepurposeBindingSource = new List<MyObject>();
        this.usepurposeBindingSource.Add(new MyObject() { Name = "A", ID = 1 });
        this.usepurposeBindingSource.Add(new MyObject() { Name = "B", ID = 2 });
        this.usepurposeBindingSource.Add(new MyObject() { Name = "C", ID = 3 });
    }
}

private void FillUpCombo()
{
    FillUpData();

    // what you have from design
    // comment out the first line
    //this.usepurposeComboBox.DataSource = this.usepurposeBindingSource;
    this.usepurposeComboBox.DisplayMember = "Name";
    this.usepurposeComboBox.FormattingEnabled = true;
    this.usepurposeComboBox.Location = new System.Drawing.Point(277, 53);
    this.usepurposeComboBox.Name = "usepurposeComboBox";
    this.usepurposeComboBox.Size = new System.Drawing.Size(218, 21);
    this.usepurposeComboBox.TabIndex = 4;
    this.usepurposeComboBox.ValueMember = "id";

    // to do in code:

    this.usepurposeBindingSource.Insert(0, new MyObject() { Name = "Choose One", ID = 0 });

    // bind the data source
    this.usepurposeComboBox.DataSource = this.usepurposeBindingSource;

}
List usepurposeBindingSource{get;set;}
私有void fillupdatea()
{
//模拟外部数据
如果(usepurposeBindingSource==null | | usepurposeBindingSource.Count==0)
{
this.usepurposeBindingSource=新列表();
this.usepurposeBindingSource.Add(新的MyObject(){Name=“A”,ID=1});
this.usepurposeBindingSource.Add(新的MyObject(){Name=“B”,ID=2});
this.usepurposeBindingSource.Add(新的MyObject(){Name=“C”,ID=3});
}
}
私有void FillUpCombo()
{
fillUpdatea();
//你从设计中得到了什么
//注释掉第一行
//this.usepurposeComboBox.DataSource=this.usepurposeBindingSource;
this.usepurposeComboBox.DisplayMember=“Name”;
this.usepurposeComboBox.FormattingEnabled=true;
this.usepurposeComboBox.Location=新系统.Drawing.Point(277,53);
this.usepurposeComboBox.Name=“usepurposeComboBox”;
this.useComboBox.Size=新系统.Drawing.Size(218,21);
this.useComboBox.TabIndex=4;
this.usepurposeComboBox.ValueMember=“id”;
//要在代码中执行:
this.usepurposeBindingSource.Insert(0,新MyObject(){Name=“Choose One”,ID=0});
//绑定数据源
this.usepurposeComboBox.DataSource=this.usepurposeBindingSource;
}
诀窍是注释掉
数据源
行,并在代码中执行该操作,在模型中的对象中插入另一个元素


//this.usepurposeComboBox.DataSource=this.usepurposeBindingSource

最简单的方法是用某种“视图模型”包装BindingSource。新类将返回一个“完整”的项列表——既包括从原始绑定源提供的项,也包括那些“附加”项

然后可以将新包装绑定到组合框


不久前我写了一篇关于这个的文章。。。这不是我最好的作品,可能有点过时,但它应该能让你达到目的。

我自己解决了。我创建了一个新的未绑定组合框,然后将其绑定到一个datatable。不确定这是不是最好的方法,但对我来说很有效。谢谢你的建议。:)

private void FillCombobox()
{
使用(mydatabaseEntities mydatabaseEntities=new mydatabaseEntities())
{
List usepurposes=mydatabaseEntities.usepurposes.ToList();
DataTable dt=新的DataTable();
dt.列。添加(“id”);
dt.列。添加(“名称”);
添加(-1,“测试行”);
foreach(usepurpose中的usepurpose)
{
dt.Rows.Add(usecompose.id,usecompose.Name);
}
usepurposeComboBox.ValueMember=dt.Columns[0]。ColumnName;
usepurposeComboBox.DisplayMember=dt.Columns[1]。ColumnName;
usepurposeComboBox.DataSource=dt;
}
}

最短的方法是向dataTable中添加新行,然后将comboBox绑定到它,如下所示:

公司薪酬=新公司()

查看此链接:

在asp中,可以添加以下内容以插入空行:

    <asp:DropDownList ID="CustomerDropDownList" runat="server"
    DataSourceID="CustomerEntityDataSource" DataTextField="CustomerId"
    DataValueField="CustomerId" AppendDataBoundItems="true">
    <asp:ListItem Text="Select All Customers" Value="" />
    </asp:DropDownList>

这是办不到的。System.Windows.Forms.dll中发生类型为“System.ArgumentException”的未处理异常。其他信息:设置DataSource属性时无法修改Items集合。为什么不将它们添加到
中。usepurposeBindingSource
?AppendDataBoundItems属性似乎仅适用于DropDownList,而不是DropDownList组合词。
private void FillCombobox()
        {
            using (mydatabaseEntities mydatabaseEntities = new mydatabaseEntities())
            {
                List<usepurpose> usepurposes = mydatabaseEntities.usepurposes.ToList();              
                DataTable dt = new DataTable();
                dt.Columns.Add("id");
                dt.Columns.Add("Name");
                dt.Rows.Add(-1, "test row");
                foreach (usepurpose usepurpose in usepurposes)
                {
                    dt.Rows.Add(usepurpose.id, usepurpose.Name);
                }
                usepurposeComboBox.ValueMember = dt.Columns[0].ColumnName;
                usepurposeComboBox.DisplayMember = dt.Columns[1].ColumnName;
                usepurposeComboBox.DataSource = dt;
            }
        }
        //pupulate dataTable with data
        DataTable DT = comps.getCompaniesList();

        //create a new row
        DataRow DR = DT.NewRow();
        DR["c_ID"] = 0;
        DR["name"] = "Add new Company";
        DR["country"] = "IR";

        //add new row to data table
        DT.Rows.Add(DR);

        //Binding DataTable to cxbxCompany
        cxbxCompany.DataSource = DT;
        cxbxCompany.DisplayMember = "name";
        cxbxCompany.ValueMember = "c_ID";
    <asp:DropDownList ID="CustomerDropDownList" runat="server"
    DataSourceID="CustomerEntityDataSource" DataTextField="CustomerId"
    DataValueField="CustomerId" AppendDataBoundItems="true">
    <asp:ListItem Text="Select All Customers" Value="" />
    </asp:DropDownList>
    DropDownList1.AppendDataBoundItems = true;
    DropDownList1.Items.Add(new ListItem("Select All Customers", "-1"));