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调试一下,定位出异常代码!
------解决思路----------------------
既然你已经有一个工程是完全好用的,仔细看到底哪里有区别吧,细节问题只能自己排查了
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调试一下,定位出异常代码!
------解决思路----------------------
既然你已经有一个工程是完全好用的,仔细看到底哪里有区别吧,细节问题只能自己排查了