不用CreateChildView.
DataViewManager dvm = new DataViewManager(myDataSet);
dvm.DataViewSetting["母表"].Sort = "要排序的母表字段";
dvm.DataViewSetting["子表"].Sort = "要排序的子表字段";comboBox.DataSource = dvm;
comboBox.DisplayMember = "母表.母表中要表示的字段";
comboBox.ValueMember = "母表.母表的primary key字段";listBox.DataSource = dvm;
listBox.DisplayMember = "母表.关系名.子表中要显示的字段";
listBox.ValueMember = "母表.关系名.子表的primary key字段";textBox.DataBindings.Add("Text", dvm, "母表.关系名.子表中要显示的字段");更改和删除通过下面对这些语句可以实现
private void btnModifyChildItem_Click(object sender, EventArgs e)
{
DataRowView drv = ((DataRowView)listBox.SelectedItem);
drv["子表字段"] = "新值";
drv.EndEdit();
} //奇怪,没有设置DataView的AllowEdit,但是更新数据库竟然有效!
private void btnDeleteChildItem_Click(object sender, EventArgs e)
{
DataRowView drv =(DataRowView)listBox.SelectedItem;
drv.Delete();
EndEdit();
}增加时用还面语句:
CurrencyManager cm = (CurrencyManager)this.BindingContext[dvm, "母表.关系名"];
DataRowView drv = ((DataRowView)cm.Current).DataView.AddNew();
drv["子表字段"] = "新值";
drv.EndEdit();我想问的是增加时有没有更好的方法?
DataViewManager dvm = new DataViewManager(myDataSet);
dvm.DataViewSetting["母表"].Sort = "要排序的母表字段";
dvm.DataViewSetting["子表"].Sort = "要排序的子表字段";comboBox.DataSource = dvm;
comboBox.DisplayMember = "母表.母表中要表示的字段";
comboBox.ValueMember = "母表.母表的primary key字段";listBox.DataSource = dvm;
listBox.DisplayMember = "母表.关系名.子表中要显示的字段";
listBox.ValueMember = "母表.关系名.子表的primary key字段";textBox.DataBindings.Add("Text", dvm, "母表.关系名.子表中要显示的字段");更改和删除通过下面对这些语句可以实现
private void btnModifyChildItem_Click(object sender, EventArgs e)
{
DataRowView drv = ((DataRowView)listBox.SelectedItem);
drv["子表字段"] = "新值";
drv.EndEdit();
} //奇怪,没有设置DataView的AllowEdit,但是更新数据库竟然有效!
private void btnDeleteChildItem_Click(object sender, EventArgs e)
{
DataRowView drv =(DataRowView)listBox.SelectedItem;
drv.Delete();
EndEdit();
}增加时用还面语句:
CurrencyManager cm = (CurrencyManager)this.BindingContext[dvm, "母表.关系名"];
DataRowView drv = ((DataRowView)cm.Current).DataView.AddNew();
drv["子表字段"] = "新值";
drv.EndEdit();我想问的是增加时有没有更好的方法?
2、有一个listBox用于显示类别对应的项。
3、有一个textBox用于显示listBox中当前选定的项。DataViewManager dvm = new DataViewManager(myDataSet);
...
comboBox.DataSource = dvm;
comboBox.DisplayMember = "母表.母表字段";
comboBox.ValueMember = "母表.母表中的primary key字段";listBox.DataSource = dvm;
listBox.DisplayMember = "母表.关系名.子表字段";
listBox.ValueMember = "母表.关系名.子表中的primary key字段";textBox.DataBinding.Add("Text", dvm, "母表.关系名.子表字段");当点击buttonAdd时向listBox增加一项:
private buttonAdd_Click(object sender, EventArgs e)
{
CurrencyManager cm = (CurrencyManager)this.BindingContext[dvm, "母表.关系名"];
DataRowView drv = ((DataRowView)cm.Current).DataView.AddNew();
drv["子表字段"] = textBox.Text;
drv.EndEdit();
}
不过,这时候会出现问题,比如在textBox里输入'xxx',则listBox里的当前选定项变为‘xxx’,另外又多了一个'xxx'。请问怎么解决?另外,还有一个buttonModify用来修改listBox的当前选项。
private buttonModify_Click(object sender, EventArgs)
{
DataRowView drv = (DataRowView)listBox.SelectedItem;
drv["子表字段"] = textBox.Text;
drv.EndEdit();
}
增加和修改操作都用textBox里输入的值来进行,是不是因为这个才出现问题?
请问有没有办法在继续共用一个textBox的情况下,用二个button来进行增加及修改操作?对了,记得过去有人说在增加一个项时,CurrencyManager的指针要移到最后一个...?我也记不清楚了,不过是不是和俺地问题有联系泥?
那就为类增加一个CurrencyManager cm;
cm = (CurrencyManager)this.BindingContext[dvm, "母表.关系名"];
增加时
private buttonAdd_Click(object sender, EventArgs e)
{
DataView dv = (DataView)cm.List;
DataRowView drv = dv.AddNew();
drv["子表字段"] = textBoxAdd.Text.Trim();
cm.Position = cm.Count - 1;
drv.EndEdit();
}
修改:
private buttonModify_Click(object sender, EventArgs)
{
DataRowView drv = (DataRowView)cm.Current;
drv["子表字段"] = textBox.Text.Trim();
drv.EndEdit();
}
删除:
((DataRowView)cm.Current).Delete();