DataGridView 绑定 的时候记得添加
dataGridView1.DataSource = ds;
dataGridView1.DataMember = ds.Tables[0].TableName;
//已方便后期判断ds是否修改了
ds.AcceptChanges();
保存时:
private void btnSave_Click(object sender, EventArgs e)
{
try
{
ds.Tables[0].Select(null, null, DataViewRowState.ModifiedCurrent);
//ds.Tables[0].Select(null, null, DataViewRowState.ModifiedOriginal);
this.Cursor = Cursors.WaitCursor;
//单据明细
PageCommon pageCommon = new PageCommon();
//获取单据明细列中有效的行数
ArrayList arrDTLine = new ArrayList();
DataRow[] dr;
if (ds.HasChanges(DataRowState.Modified))//有修改 {
}
评论(1)┆阅读(5)
论坛评论
漫天樱花雨
09.13 16:14
项目中 生产通知单 ,显示隐藏列的设置 中 有运用到
DataTable的某行删除后,无法获取该行的数据了 的解决方案
//染整分缸进仓
if (ds.HasChanges(DataRowState.Deleted))//删除的行
{
drDelete = ds.Tables[0].Select(null, null, DataViewRowState.Deleted);
}
foreach (DataRow dr in drDelete)
{
rfglDDL.DTData[j] = new ServiceRFGL.DTStru();
rfglDDL.DTData[j].Line = int.Parse(pageCommon.StringIsNull(dr["Line", DataRowVersion.Original]));//行号
rfglDDL.DTData[j].TRAN_NO = txtRef_NO.Text.Trim();
rfglDDL.DTData[j].H_Line = int.Parse(pageCommon.StringIsNull(dr["H_Line", DataRowVersion.Original]));
rfglDDL.DTData[j].BZ_State = 3; //辅助标志1:新增2:修改3 删除 (表:无该字段XSC 2008-02-19)
j++;
}
网上找的说明
(1)DataSet中的数据如果发生了更改,同时有添加、修改、删除的数据,是否能够一次性的更新到数据库呢呢?
我只会一行一行的更新,而且首先检查该行状态是"Added"、"Modified"、"Deleted",然后调用不同的存储过程,并且将各列的数据作为参数传递给存储过程。感觉累死了,最主要的是感觉这样做性能好象不会好(DataSet有其它更新方法吗?)。
(2)如果DataSet的数据已经被Deleted,不能用DataRow获取该行数据了,那怎么知道要删除哪一行呢?
以下代码示例显示了表中所有已删除行的值。已删除的行没有 Current 行版本,因此在访问列值时必须传递
DataRowVersion.Original。
DataTable catTable = catDS.Tables["Categories"];
DataRow[] delRows = catTable.Select(null, null, DataViewRowState.Deleted);
Console.WriteLine("Deleted rows:/n");
foreach (DataColumn catCol in catTable.Columns)
Console.Write(catCol.ColumnName + "/t");
Console.WriteLine();
foreach (DataRow delRow in delRows)
{
foreach (DataColumn catCol in catTable.Columns)
Console.Write(delRow[catCol, DataRowVersion.Original] + "/t");
Console.WriteLine();
}