Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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# 从其他表单更新DataGridViewComboxColumn_C#_Visual Studio 2015_Datagridviewcombobox - Fatal编程技术网

C# 从其他表单更新DataGridViewComboxColumn

C# 从其他表单更新DataGridViewComboxColumn,c#,visual-studio-2015,datagridviewcombobox,C#,Visual Studio 2015,Datagridviewcombobox,我有以下代码来填充DataGridViewComboBoxColumn try { itemReader = sc.ExecuteReader(); itemDT = new DataTable(); itemDT.Columns.Add("id", typeof(string)); itemDT.Columns.Add("ar_desc", typeof(stri

我有以下代码来填充DataGridViewComboBoxColumn

        try
        {
            itemReader = sc.ExecuteReader();

            itemDT = new DataTable();

            itemDT.Columns.Add("id", typeof(string));
            itemDT.Columns.Add("ar_desc", typeof(string));
            itemDT.Load(itemReader);

            itemIDcmbColmn.ValueMember = "id";
            itemIDcmbColmn.DisplayMember = "ar_desc";
            itemIDcmbColmn.DataSource = itemDT;
        }
        catch (Exception e)
        {
            MessageBox.Show("Exception - populateGridComboBox(): " + e.Message);
        }
        finally
它很好地填充组合框。我有一个按钮可以将新记录插入DataGridViewComboBoxColumn,它打开另一个表单FormB并提示用户输入新项的名称和ID。但问题是,在我关闭并重新打开FormA之前,新添加的项目不会出现在组合框中。这是我的FormB代码:

            BindingSource bs = new BindingSource();
            DataGridViewComboBoxColumn itemCmbClmn = prcFrm.itemIDcmbColmn; //Get FormsA DataGridViewComboBoxColumn
            DataTable itemDataTable = prcFrm.ItemData; //Get FormA datatable

            itemCmbClmn.ValueMember = itemID.ToString();
            itemCmbClmn.DisplayMember = txtItemAr.Text;

            bs.DataSource = itemDataTable;
            itemCmbClmn.DataSource = bs;

            prcFrm.dataGridView1.Update();
当我运行addNew时,我得到一个异常,该字段不存在。请帮忙,我是C#和visual studio的新手,提前谢谢你

  • MainForm是MainForm.cs
  • formB是formB.cs的实例
  • FormB是“FormB.cs”类
  • 表格B:

    public event ItemAdded ItemAddedNotify;
    
    #region OwnEventsAndDelegates
        public delegate void ItemAdded(object sender, ItemAddedEventArgs e);
    
        public class ItemAddedEventArgs : EventArgs
        {
            string _valueMember;
            public string ValueMember
            {
                get { return _ValueMember; }
                set { _ValueMember = value; }
            }
    
            string _displaymember;
            public string DisplayMember
            {
                get { return _displayMember; }
                set { _displayMember = value; }
            }
    
            public ItemAddedEventArgs(string pValueMember, string pDisplaymember)
            {
                _valueMember = pValueMember;
                _displayMember = pDisplaymember;
            }
        }
    
        #endregion
    
    稍后,在FormB中,您现在执行update(),只需引发事件,而不是更新:

            ItemAddedNotify(this,new ItemAddedEventArgs(itemID.ToString(), txtItemAr.Text));
    
    但是。但当你打开formB时,你必须订阅该活动。 在Mainform中,在实例化formB之后,但在显示它之前,您应该执行以下操作:

    this.formB.ItemAddedNotify += new FormB.ItemAddedNotify(On_ItemAdded);
    
    方法

    On_ItemAdded(object sender, FormB.ItemAddedEventArgs e)
    {
      // Here You will have to add the stuff.
      // IT MIGHT BE BETTER TO USE TYPED DATASETS/TABLES.
      // It also might be, that the record will be visible ONLY after
      // closing formB. Please let me know.
    }
    
    还必须存在于主窗体中


    在结束formB后,不要忘记取消订阅活动,相当于+=,但有-=。

    您有一个主表单、另一个表单、amodal表单formA和第三个amodal表单formB吗?是这样吗?FormA是包含datagrid的主表单,datagrid包含DataGridViewComboBoxColumn,第二个表单FormB是单击addNewItem按钮时显示的表单。没有第三个formOk。然后让FormB抛出一个事件。您不应该直接从其他表单更新mainform元素,也不应该创建交叉引用。相反,您在表单b上创建自己的事件,并在打开表单b时订阅该事件。您将表单b上的事件(自定义事件参数也可用于传递要添加的新记录)下放到表单A。然后,表单A上的子描述事件处理程序必须更新网格。试试这个。好吗?我创建了DataGridViewComboBox的一个新实例,并将FormA的实例添加到新实例中,它解决了异常,但新添加的值在我关闭并重新打开FormA之前不会出现,请提供任何帮助?谢谢,但您可以发布一个这样做的示例代码吗?因为我是C#及其活动的新手。。再次感谢。非常感谢,但是这会如何影响表单中ComboBox的数据表?代码还没有准备好,我将不得不完成它,我现在很忙,将尽快完成这段代码。现在它应该完成工作,只要你的表单是amodal(我想,现在)。谢谢亲爱的,我已经按照你的建议放置了代码,并进行必要的修改,但我不知道将ItemAddedNotify放在何处(这是新的ItemAddedEventArgs(itemID.ToString(),txtItemAr.Text));在何处放置ItemAddedNotify(这是新的ItemAddedEventArgs(itemID.ToString(),txtItemAr.Text));