![DataFormGuild.gif](/images/cnblogs_com/wddavid/images/DataFormGuild.gif)
上面是用VS.NET的"数据窗体向导"自动生成的窗体.但是,我们从其中生成的代码里可以学到很多东西.
下面,我们会一个个按钮的代码进行讲解:
btnLoad(加载):
private void btnLoad_Click(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 尝试加载数据集。
this.LoadDataSet();
}
catch (System.Exception eLoad)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 在此处添加错误处理代码。
// 显示错误信息(如果有)。
System.Windows.Forms.MessageBox.Show(eLoad.Message);
}
this.objjobDataSet_PositionChanged();
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)
public void LoadDataSet()
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
// 创建一个新数据集以保存从 FillDataSet 调用返回的记录。
// 使用了一个临时数据集,这是因为填充现有的数据集
// 需要重新绑定数据绑定。
Car.jobDataSet objDataSetTemp;
objDataSetTemp = new Car.jobDataSet();
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 尝试填充临时数据集。
this.FillDataSet(objDataSetTemp);
}
catch (System.Exception eFillDataSet)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 在此处添加错误处理代码。
throw eFillDataSet;
}
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 清空数据集中的旧记录。
objjobDataSet.Clear();
// 将记录合并到主数据集中。
objjobDataSet.Merge(objDataSetTemp);
}
catch (System.Exception eLoadMerge)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 在此处添加错误处理代码。
throw eLoadMerge;
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)
public void FillDataSet(Car.jobDataSet dataSet)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
// 在填充数据集前关闭约束检查。
// 这允许适配器填充数据集而不用考虑
// 表之间的依赖项。
dataSet.EnforceConstraints = false;
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 打开连接。
this.oleDbConnection1.Open();
// 尝试通过 OleDbDataAdapter1 填充数据集。
this.oleDbDataAdapter1.Fill(dataSet);
}
catch (System.Exception fillException)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 在此处添加错误处理代码。
throw fillException;
}
finally
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 重新打开约束检查。
dataSet.EnforceConstraints = true;
// 无论是否引发了异常都关闭连接。
this.oleDbConnection1.Close();
}
![](/Images/OutliningIndicators/InBlock.gif)
} btnUpdate(更新):
private void btnUpdate_Click(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 尝试更新数据源。
this.UpdateDataSet();
}
catch (System.Exception eUpdate)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 在此处添加错误处理代码。
// 显示错误信息(如果有)。
System.Windows.Forms.MessageBox.Show(eUpdate.Message);
}
this.objjobDataSet_PositionChanged();
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)
public void UpdateDataSet()
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
// 创建一个新数据集来保存对主数据集所做的更改。
Car.jobDataSet objDataSetChanges = new Car.jobDataSet();
// 停止当前的任何编辑。
this.BindingContext[objjobDataSet,"tblJobDetails"].EndCurrentEdit();
// 获取对主数据集所做的更改。
objDataSetChanges = ((Car.jobDataSet)(objjobDataSet.GetChanges()));
// 检查是否做了任何更改。
if ((objDataSetChanges != null))
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 需要做一些更改,所以尝试通过调用 update 方法
// 和传递数据集以及任何参数来更新数据源。
this.UpdateDataSource(objDataSetChanges);
objjobDataSet.Merge(objDataSetChanges);
objjobDataSet.AcceptChanges();
}
catch (System.Exception eUpdate)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 在此处添加错误处理代码。
throw eUpdate;
}
// 添加代码以检查返回的数据集中是否有任何可能已被
// 推入到行对象错误中的错误。
}
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)
public void UpdateDataSource(Car.jobDataSet ChangedRows)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 在有挂起的更改时,只需要更新数据源即可。
if ((ChangedRows != null))
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 打开连接。
this.oleDbConnection1.Open();
// 尝试更新数据源。
oleDbDataAdapter1.Update(ChangedRows);
}
}
catch (System.Exception updateException)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 在此处添加错误处理代码。
throw updateException;
}
finally
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 无论是否引发了异常都关闭连接。
this.oleDbConnection1.Close();
}
![](/Images/OutliningIndicators/InBlock.gif)
} btnCancelAll:(全部取消)
private void btnCancelAll_Click(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
this.objjobDataSet.RejectChanges();
![](/Images/OutliningIndicators/InBlock.gif)
} btnAdd(添加记录):
private void btnAdd_Click(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
try
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// 清除当前编辑内容
this.BindingContext[objjobDataSet,"tblJobDetails"].EndCurrentEdit();
this.BindingContext[objjobDataSet,"tblJobDetails"].AddNew();
}
catch (System.Exception eEndEdit)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
System.Windows.Forms.MessageBox.Show(eEndEdit.Message);
}
this.objjobDataSet_PositionChanged();
![](/Images/OutliningIndicators/InBlock.gif)
} btnDelete(删除记录):
private void btnDelete_Click(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
if ((this.BindingContext[objjobDataSet,"tblJobDetails"].Count > 0))
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.BindingContext[objjobDataSet,"tblJobDetails"].RemoveAt(this.BindingContext[objjobDataSet,"tblJobDetails"].Position);
this.objjobDataSet_PositionChanged();
}
![](/Images/OutliningIndicators/InBlock.gif)
} btnCancel(取消):
private void btnCancel_Click(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
this.BindingContext[objjobDataSet,"tblJobDetails"].CancelCurrentEdit();
this.objjobDataSet_PositionChanged();
![](/Images/OutliningIndicators/InBlock.gif)
} 几个移动记录按钮集合:
private void btnNavFirst_Click(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
this.BindingContext[objjobDataSet,"tblJobDetails"].Position = 0;
this.objjobDataSet_PositionChanged();
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)
private void btnNavPrev_Click(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
this.BindingContext[objjobDataSet,"tblJobDetails"].Position = (this.BindingContext[objjobDataSet,"tblJobDetails"].Position - 1);
this.objjobDataSet_PositionChanged();
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)
private void btnNavNext_Click(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
this.BindingContext[objjobDataSet,"tblJobDetails"].Position = (this.BindingContext[objjobDataSet,"tblJobDetails"].Position + 1);
this.objjobDataSet_PositionChanged();
![](/Images/OutliningIndicators/InBlock.gif)
}
![](/Images/OutliningIndicators/None.gif)
private void btnLast_Click(object sender, System.EventArgs e)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
this.BindingContext[objjobDataSet,"tblJobDetails"].Position = (this.objjobDataSet.Tables["tblJobDetails"].Rows.Count - 1);
this.objjobDataSet_PositionChanged();
![](/Images/OutliningIndicators/InBlock.gif)
} objjobDataSet_PositionChanged方法只是显示页数的视觉操作:
private void objjobDataSet_PositionChanged()
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
this.lblNavLocation.Text = ((((this.BindingContext[objjobDataSet,"tblJobDetails"].Position + 1)).ToString() + " 的 ")
+ this.BindingContext[objjobDataSet,"tblJobDetails"].Count.ToString());
![](/Images/OutliningIndicators/InBlock.gif)
}