Binding 将用户控件的2个或多个文本框绑定到DGV中。只有第一个文本框起作用

Binding 将用户控件的2个或多个文本框绑定到DGV中。只有第一个文本框起作用,binding,textbox,Binding,Textbox,将用户控件绑定到DGV的数据有问题。当我只绑定到控件的一个文本框时,它就工作了。但是,当我绑定多个文本框时,只有第一个文本框起作用。请帮忙。我是初学者。下面是代码 我创建了窗口表单应用程序(名为Test100) 我在项目Test100中添加了一个用户控件“MyBox”,在其中添加了两个文本框(textBox1和textBox2) 在MyBox.cs中,我有以下内容: using System; using System.Collections.Generic; using System.Com

将用户控件绑定到DGV的数据有问题。当我只绑定到控件的一个文本框时,它就工作了。但是,当我绑定多个文本框时,只有第一个文本框起作用。请帮忙。我是初学者。下面是代码

  • 我创建了窗口表单应用程序(名为Test100)
  • 我在项目Test100中添加了一个用户控件“MyBox”,在其中添加了两个文本框(textBox1和textBox2)
  • 在MyBox.cs中,我有以下内容:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Drawing;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    namespace Test100
    public partial class MyBox : UserControl
    {
        public string Box1
        {
            get
            {
                return textBox1.Text;
            }
            set
            {
                textBox1.Text = value;
            }
        }
    
        public string Box2
        {
            get
            {
                return textBox2.Text;
            }
            set
            {
                textBox2.Text = value;
            }
        }
        public MyBox()
        {
            InitializeComponent();
        }
    }
    
  • 构建之后,我打开了我的表单1:在表单1中添加了MyBox控件,在表单1中添加了DGV,添加了一个刷新表单的按钮。数据列表直接在Form1.cs中生成。表1.cs如下所示:

    public partial class Form1 : Form
    {
        private List<Track> trackList = new List<Track>();
        public Form1()
        {
            InitializeComponent();
        }
    
        private void Form1_Load(object sender, EventArgs e)
        {
            trackList.Add(new Track
            {
                TrackID = 1234,
                Name = "Name1111"
            });
            trackList.Add(new Track
            {
                TrackID = 5678,
                Name = "Name2222"
            });
            trackList.Add(new Track
            {
                TrackID = 9012,
                Name = "Name333"
            });
            BindingSource bindingSource1 = new BindingSource();
            bindingSource1.DataSource = trackList;
            dataGridView1.DataSource = bindingSource1;
    
            myBox1.DataBindings.Add("Box1", dataGridView1.DataSource, "TrackID");
            myBox1.DataBindings.Add("Box2", dataGridView1.DataSource, "Name");
    
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            this.Refresh();
        }
    }
    public class Track
    {
        public int TrackID { get; set; }
        public string Name { get; set; }
    } 
    
    公共部分类表单1:表单
    {
    私有列表trackList=新列表();
    公共表格1()
    {
    初始化组件();
    }
    私有void Form1\u加载(对象发送方、事件参数e)
    {
    trackList.Add(新曲目)
    {
    TrackID=1234,
    Name=“Name1111”
    });
    trackList.Add(新曲目)
    {
    TrackID=5678,
    Name=“Name2222”
    });
    trackList.Add(新曲目)
    {
    TrackID=9012,
    Name=“Name333”
    });
    BindingSource bindingSource1=新的BindingSource();
    bindingSource1.DataSource=跟踪列表;
    dataGridView1.DataSource=bindingSource1;
    myBox1.DataBindings.Add(“Box1”,dataGridView1.DataSource,“TrackID”);
    myBox1.DataBindings.Add(“Box2”,dataGridView1.DataSource,“Name”);
    }
    私有无效按钮1\u单击(对象发送者,事件参数e)
    {
    这个。刷新();
    }
    }
    公共类轨道
    {
    public int TrackID{get;set;}
    公共字符串名称{get;set;}
    } 
    
  • 开始调试后,我更改了Box1值并按下按钮1,DGV上的TrackID随我更改的值而更改。但是,当我更改Box2的值并按下按钮1时,DGV上的Name列没有更改,但Box2返回到原始值

  • 如果我只绑定Box2,那么Box2将工作

请帮忙。谢谢。

好的。不要介意。我发现这是MS从2004年就认识到并在.NET1.1中修复的一个已知问题。
然而,我使用VS2010并使用Winform,我尝试应用微软针对这个问题修复的补丁,它可以正常工作。感谢阅读。

您的问题代码解决了我的问题!谢谢