public partial class RequestEditor : UserControl
{
BudgetDataSet dataSource;
public BudgetDataSet DataSource
{
get { return dataSource; }
set
{
if (value == null)
throw new ArgumentNullException("dataSoucre");
dataSource = value;
BindControls();
}
}
public int RowIndex
{
get { return requestBindingSource.Position; }
set
{
if (dataSource == null)
throw new ArgumentException("DataSource is not defined");
requestBindingSource.Position = value;
}
}
public RequestEditor()
{
InitializeComponent();
dtpDate.Value = DateTime.Now;
dgvDetails.AutoGenerateColumns = false;
}
public void AddNew()
{
requestBindingSource.AddNew();
dtpDate.Value = DateTime.Now;
}
public void Save()
{
requestBindingSource.EndEdit();
//***************************************
//-- When I do it here, the data updates as well, perfectly
//I'm commmenting the update lines in the form when I uncommenting this, of course.
//new RequestTableAdapter.Update(DataSource.Request);
//new RequestDetailTableAdapter().Update(DataSource.RequestDetail);
//new RequestTargetsTableAdapter().Update(DataSource.RequestTargets);
}
public void Cancel()
{
requestBindingSource.CancelEdit();
}
private void BindControls()
{
applicantsBindingSource.DataSource = DataSource;
productBindingSource.DataSource = DataSource;
targetBindingSource.DataSource = DataSource;
requestBindingSource.DataSource = DataSource;
}
}
partial class RequestForm : Form
{
RequestEditor re;
public RequestForm()
{
InitializeComponent();
re = new RequestEditor();
re.Dock = DockStyle.Fill;
Controls.Add(re);
}
private void RequestEditForm_Load(object sender, EventArgs e)
{
budgetDataSet.EnforceConstraints = false;
this.productTableAdapter.Fill(this.budgetDataSet.Product);
this.targetTableAdapter.Fill(this.budgetDataSet.Target);
this.applicantsTableAdapter.Fill(this.budgetDataSet.Applicants);
re.DataSource = budgetDataSet;
re.AddNew();
}
protected override void OnClosing(CancelEventArgs e)
{
re.Save(); //calls requestBindingSource.EndEdit() on re.
// here it doesn't work, only the Request row is updated, partially.
//In partially I mean that not all control values are returned to the dataSource.
new RequestTableAdapter.Update(budgetDataSet.Request);
new RequestDetailTableAdapter().Update(budgetDataSet.RequestDetail);
new RequestTargetsTableAdapter().Update(budgetDataSet.RequestTargets);
}
}