【问题标题】:Copy a Record in bindingsource在 bindingsource 中复制一条记录
【发布时间】:2014-06-05 14:52:43
【问题描述】:

我想学习一些 C#。所以我创建了一个Winforms。我使用数据集将表单连接到 SQL-Server 2008。 Form 还有一个 TableAdapter、一个 TableAdapter、一个 Bindingnavigator 和一个 Bindingsource。 表单上有一些文本框。

表单通过以下方式获取数据:

 private void Form1_Load(object sender, EventArgs e)
    {                                          
        this._CranesTableAdapter.Fill(this.dataSet1._Cranes); 
    }

我假设 Tableadapter 用 Records 填充数据集中的 Table _Cranes。 我还有一些代码可以添加新记录。

  this._CranesBindingSource.AddNew();
  this._CranesBindingSource.MoveLast();    

效果很好。 但现在我想复制焦点所在的记录。

有人可以帮助我吗?我希望我的信息足够了。

【问题讨论】:

  • 你想复制到哪里?
  • 在同一个绑定源中。我想复制记录,除了id。 id 应该是另一个。然后转到记录并更改一些字段并保存数据。

标签: c# .net winforms


【解决方案1】:

BindingSourceEncapsulates the data source for a form;它不存储任何数据。所有数据都存储在DataTableDataSet 中,对于使用DataBases,其中包含称为TablesDataTable(s) 集合; DataTable 最终将实际数据保存在DataRows 中。

BindingSource 为您做的一件事是跟踪当前行并提供一种机制来在行中前后移动。

(注意DataBinding不仅适用于DataBase数据,还适用于.Net中的各种数据容器!)

所以如果你想复制当前行,你可以这样做

  • 获取当前行的句柄
  • 获取表的句柄
  • 将行导入表中

使用您的 CranesBindingSource 这将是代码:

DataRow cRow = (DataRow)CranesBindingSource.Current;
DataTable dt = (DataTable)CranesBindingSource.DataSource;
dt.ImportRow(cRow);  

这段代码假定DataSourceDataTable。相反,如果它是 DataSet,则它包含一个表集合 Tables,您将不得不使用相应的表或索引到集合中,如下所示:

DataTable dt = (DataTable)CranesBindingSource.DataSet.Tables[0];

之后,您可以更改数据,尤其是您喜欢或需要的密钥。

【讨论】:

  • 您好,谢谢您的回答。我试过这段代码,但有一个错误。 "System.Data.DataRowView 类型的对象无法转换为 System.Data.DataRow 类型"
  • 您是否收到第一行的错误?你可以试试:DataRow cRow = ((DataRowView)CranesBindingSource.Current).Row;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-19
  • 2021-09-18
  • 2020-09-12
相关资源
最近更新 更多