dataGridView与textBox绑定同一数据集,指向空行后textBox内容不发生变更

dataGridView与textBox绑定同一数据集,指向空行后textBox内容不发生变化
dataGridView与textBox绑定同一dataset
比如dataGridView绑定了一人员信息表,一个textbox绑定人员信息表的姓名,一个textbox绑定年龄。
一般情况下,当dataGridView当前行发生变化后,textbox姓名的内容会变成当前行的姓名,textbox年龄会变成年龄。
当指向空行后,值是null,textbox姓名和textbox年龄都会为空。
问题是,现在我做了两个程序,程序代码基本一致,用的数据库也相同,唯一个区别就是绑定的表不一样(空行的值都是null),一个没有任何问题,另一个则不会发生变化,为什么?
下面是有问题的代码。
 private void person_Shown(object sender, EventArgs e)
        {
            string sql = "select * from " + cons.per;
            fun.read(sql);
            myBindingSource.DataSource = var.record.Tables[0];
            this.textID.DataBindings.Add("Text", myBindingSource, "编号");
            this.textName.DataBindings.Add("Text", myBindingSource, "姓名");
            this.textPhone.DataBindings.Add("Text", myBindingSource, "联系方式");
            this.textEmail.DataBindings.Add("Text", myBindingSource, "邮箱");
            this.rButtExpert.DataBindings.Add("Checked", myBindingSource, "是否专家");
            this.textUnit.DataBindings.Add("Text", myBindingSource, "单位");
            this.textOffice.DataBindings.Add("Text", myBindingSource, "科室");
            this.comBoxJob.DataBindings.Add("SelectedIndex", myBindingSource, "职务");
            this.textTitle.DataBindings.Add("Text", myBindingSource, "职称");
            this.textMajor.DataBindings.Add("Text", myBindingSource, "专业");
            this.textUserName.DataBindings.Add("Text", myBindingSource, "用户名");
            this.comBoxPower.DataBindings.Add("SelectedIndex", myBindingSource, "用户权限");
            dataGridView1.AutoGenerateColumns = false;
            int columnsnum = Properties.Settings.Default.columnnum;
            DataGridViewTextBoxColumn[] columns = new DataGridViewTextBoxColumn[columnsnum];
            for (int i = 0; i < columnsnum; i++)
            {
                String str;
                columns[i] = new DataGridViewTextBoxColumn();
                this.dataGridView1.Columns.Add(columns[i]);
                switch (i)
                {
                    case 0: str = Properties.Settings.Default.column1;
                        break;
                    case 1: str = Properties.Settings.Default.column2;
                        break;
                    case 2: str = Properties.Settings.Default.column3;
                        break;
                    case 3: str = Properties.Settings.Default.column4;
                        break;
                    case 4: str = Properties.Settings.Default.column5;
                        break;
                    case 5: str = Properties.Settings.Default.column6;
                        break;
                    case 6: str = Properties.Settings.Default.column7;
                        break;
                    case 7: str = Properties.Settings.Default.column8;
                        break;
                    case 8: str = Properties.Settings.Default.column9;
                        break;
                    case 9: str = Properties.Settings.Default.column10;
                        break;                  
                    default: str = "";
                        break;
                }
                if (str == "是否专家")
                {
                    fun.ManangeBool(str, "是", "否");
                    str = "是否专家 ";
                }
                else if(str=="职务"){
                    fun.ManangeInt(str, comBoxJob);
                    str = str + " ";
                }
                dataGridView1.Columns[i].HeaderText = str;
                dataGridView1.Columns[i].DataPropertyName = str;
            }
            dataGridView1.DataSource = myBindingSource;
        }
        private void tButtAdd_Click(object sender, EventArgs e)
        {
            int i = var.record.Tables[0].Rows.Count;
          dataGridView1.CurrentCell = dataGridView1.Rows[i].Cells[0];
       }

------解决思路----------------------
你的问题表明,和表有关。
做下面两步:
1、把你的没有任何问题的代码里面的表替换成这个不会发生变化
运行结果如果正常,你回过头来看你不会发生变化的代码
2、你拿不会发生变化的代码先F5调试一下,定位出异常代码!
------解决思路----------------------
既然你已经有一个工程是完全好用的,仔细看到底哪里有区别吧,细节问题只能自己排查了