在迭代临时数据表后,如何为原始数据行分配值

时间:2011-08-12 10:09:28

标签: c# .net asp.net ado.net

我想解释一下我需要做什么。

正如您在第二个foreach中看到的那样,我正在遍历临时数据表,但我需要为原始数据表格中的同一行设置一个值。 例如:    _uc090_WingsIntegrationDataSet.WingsBookingInterface [0] [“property”] = x;

我不知道如何实现的是如何找到该行并设置属性,我看到了LoadRow方法,但我之前从未使用过它。

            DataTable tempTable = _uc090_WingsIntegrationDataSet.WingsBookingInterface.Clone();

            DataRow[] datarows = _uc090_WingsIntegrationDataSet.WingsBookingInterface.Select("REFMDossierID = " + refmDossierId);

            if (datarows.Length > 0)
            {
                foreach (DataRow dr in datarows)
                {
                    tempTable.ImportRow(dr);
                }
            }


           //2.     foreach master row
            foreach (UC090_WingsIntegrationDataSet.WingsBookingInterfaceRow row in tempTable.Rows)

1 个答案:

答案 0 :(得分:2)

您可以使用Rows.Find()找到该行,但它要求在DataTable中的至少一列上设置PrimaryKey。

就加载新数据而言,您可以使用LoadDataRow()来更新现有行(如果提供了主键),或者如果找到任何匹配的数据类型,则插入新数据。

请使用无类型数据集查看以下示例:

DataSet dataSet = new DataSet("MyDataSet");
DataTable dataTable = dataSet.Tables.Add("JavaScriptLibraries");

DataColumn[] dataColumns =
    new[] {
        new DataColumn("Id", typeof(Int32))
            {
                AutoIncrement = true, 
                AllowDBNull = false, 
                AutoIncrementSeed = 1
            }, 
        new DataColumn("Name", typeof(String))
    };
dataTable.Columns.AddRange(dataColumns);
dataTable.PrimaryKey = new[] { dataTable.Columns["Id"] };

DataRow dataRow1 = dataTable.NewRow();
dataRow1["Name"] = "jQuery";
dataTable.Rows.Add(dataRow1);

DataRow dataRow2 = dataTable.NewRow();
dataRow2["Name"] = "MooTools";
dataTable.Rows.Add(dataRow2);

// Copy the dataset
DataSet tempDataSet = dataSet.Clone();
DataTable tempDataTable = tempDataSet.Tables["JavaScriptLibraries"];
DataRow[] tempRows = dataSet.Tables["JavaScriptLibraries"].Select("Name = 'jQuery'");

// Import rows to copy of table
foreach (var tempRow in tempRows)
{
    tempDataTable.ImportRow(tempRow);
}

foreach (DataRow tempRow in tempDataTable.Rows)
{
    // Find existing row by PK, then update it
    DataRow originalRow = dataTable.Rows.Find(tempRow["Id"]);
    originalRow["Name"] = "Updated Name";
}

// Load new data using LoadDataRow()
object[] newRow = new[] { null, "New Row" };
dataTable.BeginLoadData();
dataTable.LoadDataRow(newRow, true);
dataTable.EndLoadData();