C# 在ForEach C期间保持向表中添加行#
我有下面的代码,它在运行foreach语句以运行多个文件、填充名为dt_LearnDelivery和dt_LearnDelFAM的数据表时非常有用。但是,对于它运行的每个文件,它都会覆盖表的现有内容。我想要发生的是,每次它通过foreach语句读取新文件时,它都会添加到dt_LearnDelivery和dt_LearnDelFAM中的任何现有行中。有什么建议吗C# 在ForEach C期间保持向表中添加行#,c#,loops,foreach,datatables,C#,Loops,Foreach,Datatables,我有下面的代码,它在运行foreach语句以运行多个文件、填充名为dt_LearnDelivery和dt_LearnDelFAM的数据表时非常有用。但是,对于它运行的每个文件,它都会覆盖表的现有内容。我想要发生的是,每次它通过foreach语句读取新文件时,它都会添加到dt_LearnDelivery和dt_LearnDelFAM中的任何现有行中。有什么建议吗 using System; using System.Collections.Generic; using System.Data; u
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MessageLogging;
namespace ILRValidation
{
public static partial class Validation
{
static MessageLogging.Msgs msgs = Msgs.Instance;
static MessageLogging.Progress progress = Progress.Instance;
/// <summary>
/// Takes ILR Converted dataset, and checks for null values and outputs to separate validation dataset
/// </summary>
/// <param name="ds_NullChecks">ILR XML Import Dataset</param>
/// <returns></returns>
public static DataSet NullChecks(DataSet ds_NullChecks)
{
return Checks(ds_NullChecks);
}
public static DataSet NullChecks(string xmlPath)
{
DataSet ds_xmlDataset = new DataSet();
FileInfo fileInfo = new FileInfo(xmlPath);
ds_xmlDataset.ReadXml(fileInfo.FullName, XmlReadMode.Auto);
return Checks(ds_xmlDataset);
}
private static DataSet Checks(DataSet dataset)
{
msgs.AddMsg("Entering Checks");
progress.ResetValue();
if (ds_Validation.Tables.Contains("LearningDelivery_NullValues"))
{
ds_Validation.Tables.Remove("LearningDelivery_NullValues");
}
if (ds_Validation.Tables.Contains("LearnerDeliveryFAM_NullValues"))
{
ds_Validation.Tables.Remove("LearnerDeliveryFAM_NullValues");
}
msgs.AddMsg("Adding Extra columns to LearningDelivery & LearningDeliveryFAM");
dataset.Tables["LearningDelivery"].Columns.Add("LearnRefNumber").SetOrdinal(0);
dataset.Tables["LearningDelivery"].Columns.Add("Comments");
dataset.Tables["LearningDeliveryFAM"].Columns.Add("LearnRefNumber").SetOrdinal(0);
dataset.Tables["LearningDeliveryFAM"].Columns.Add("Comments");
DataTable dt_LearnDelivery = new DataTable();
dt_LearnDelivery.TableName = "LearningDelivery_NullValues";
foreach (DataColumn dataColumn in dataset.Tables["LearningDelivery"].Columns)
{
dt_LearnDelivery.Columns.Add(dataColumn.ColumnName);
}
//Make a table to hold the issues with LearnerDeliveryFAM
DataTable dt_LearnDelFAM = new DataTable();
dt_LearnDelFAM.TableName = "LearnerDeliveryFAM_NullValues";
foreach (DataColumn dataColumn in dataset.Tables["LearningDeliveryFAM"].Columns)
{
dt_LearnDelFAM.Columns.Add(dataColumn.ColumnName);
}
progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(LearnAimRef,'') = ''").Count());
progress.SetMessage("Checked for issues 1 of 9");
//Add "No Aim" issues to new table
foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(LearnAimRef,'') = ''"))
{
dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
dr["Comments"] = "LearnAimRef - No Aim Ref Supplied";
dt_LearnDelivery.Rows.Add(dr.ItemArray);
progress.IncProgress();
}
progress.int_Progress = 0;
progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(AimType,'') = ''").Count());
progress.SetMessage("Checked for issues 2 of 9");
//Add "No Aim Type" issues to new table
foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(AimType,'') = ''"))
{
dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
dr["Comments"] = "AimType - No Aim Type Supplied";
dt_LearnDelivery.Rows.Add(dr.ItemArray);
progress.IncProgress();
}
progress.int_Progress = 0;
progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(AimSeqNumber,'') = ''").Count());
progress.SetMessage("Checked for issues 3 of 9");
//Add "No Aim Sequence Number" issues to new table
foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(AimSeqNumber,'') = ''"))
{
dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
dr["Comments"] = "AimSeqNumber - No Aim Sequence Number Supplied";
dt_LearnDelivery.Rows.Add(dr.ItemArray);
progress.IncProgress();
}
progress.int_Progress = 0;
progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(LearnStartDate,'') = ''").Count());
progress.SetMessage("Checked for issues 4 of 9");
//Add "No Learner Start Date" issues to new table
foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(LearnStartDate,'') = ''"))
{
dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
dr["Comments"] = "LearnStartDate - No Learner Start Date Supplied";
dt_LearnDelivery.Rows.Add(dr.ItemArray);
progress.IncProgress();
}
progress.int_Progress = 0;
progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(LearnPlanEndDate,'') = ''").Count());
progress.SetMessage("Checked for issues 5 of 9");
//Add "No Learner Planned End Date" issues to new table
foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(LearnPlanEndDate,'') = ''"))
{
dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
dr["Comments"] = "LearnPlanEndDate - No Learner Planned End Date Supplied";
dt_LearnDelivery.Rows.Add(dr.ItemArray);
progress.IncProgress();
}
progress.int_Progress = 0;
progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(FundModel,'') = ''").Count());
progress.SetMessage("Checked for issues 6 of 9");
//Add "No Funding Model" issues to new table
foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(FundModel,'') = ''"))
{
dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
dr["Comments"] = "FundModel - No Funding Model Supplied";
dt_LearnDelivery.Rows.Add(dr.ItemArray);
progress.IncProgress();
}
progress.int_Progress = 0;
progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(DelLocPostCode,'') = ''").Count());
progress.SetMessage("Checked for issues 7 of 9");
//Add "No Delivery Location Postcode" issues to new table
foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(DelLocPostCode,'') = ''"))
{
dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
dr["Comments"] = "DelLocPostCode - No Delivery Location Postcode Supplied";
dt_LearnDelivery.Rows.Add(dr.ItemArray);
progress.IncProgress();
}
progress.int_Progress = 0;
progress.SetMax(dataset.Tables["LearningDelivery"].Select("Isnull(CompStatus,'') = ''").Count());
progress.SetMessage("Checked for issues 8 of 9");
//Add "No Completion Status" issues to new table
foreach (DataRow dr in dataset.Tables["LearningDelivery"].Select("Isnull(CompStatus,'') = ''"))
{
dr["LearnRefNumber"] = dr.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
dr["Comments"] = "CompStatus - No Completion Status Supplied";
dt_LearnDelivery.Rows.Add(dr.ItemArray);
progress.IncProgress();
}
progress.int_Progress = 0;
progress.SetMax(dataset.Tables["LearningDeliveryFAM"].Select("Isnull(LearnDelFAMCode,'') = '' and LearnDelFAMType = 'SOF'").Count());
progress.SetMessage("Checked for issues 9 of 9");
//Add "No SOF" issues to new table
foreach (DataRow dr in dataset.Tables["LearningDeliveryFAM"].Select("Isnull(LearnDelFAMCode,'') = '' and LearnDelFAMType = 'SOF'"))
{
DataRow AimRow = dr.GetParentRow("LearningDelivery_LearningDeliveryFAM");
dr["LearnRefNumber"] = AimRow.GetParentRow("Learner_LearningDelivery")["LearnRefNumber"].ToString();
dr["Comments"] = "LearnDelFAMCode is null where LearnDelFAMType is SOF";
dt_LearnDelFAM.Rows.Add(dr.ItemArray);
progress.IncProgress();
}
ds_Validation.Tables.Add(dt_LearnDelivery);
ds_Validation.Tables.Add(dt_LearnDelFAM);
return ds_Validation;
}
}
}
在每次运行
方法检查(DataSet DataSet)
时,使用
DataTable dt_LearnDelivery = new DataTable();
该变量需要升级为类的静态变量
namespace ILRValidation
{
public static partial class Validation
{
static MessageLogging.Msgs msgs = Msgs.Instance;
static MessageLogging.Progress progress = Progress.Instance;
static DataTable dt_LearnDelivery = new DataTable();
...
是的,帮你自己一个忙,按照@Broots Waymb的建议,将该方法分解为更小的方法。我强烈建议的一件事的可能重复是将
检查方法分解。它对单个方法做了很多工作,在调试过程中对您没有任何帮助。这只是冰山一角。您计划如何初始化该表?为什么一切都是静态的?如果要为一组新文件重用验证类,则需要清除所有内容。
namespace ILRValidation
{
public static partial class Validation
{
static MessageLogging.Msgs msgs = Msgs.Instance;
static MessageLogging.Progress progress = Progress.Instance;
static DataTable dt_LearnDelivery = new DataTable();
...