不用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();我想问的是增加时有没有更好的方法?

解决方案 »

  1.   

    1、有一个comoBox用于显示类别。
    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的指针要移到最后一个...?我也记不清楚了,不过是不是和俺地问题有联系泥?
      

  2.   

    既然CurrencyManager可以转换为DataRowView或DataView(通过CurrencyManager.List)
    那就为类增加一个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();