首先感谢您抽出时间提供帮助,如果可以的话,现在回答这个问题。我正在修改现有的数据表以获得所需的输出。
我已经编写了代码,无论是什么都没做,删除或添加列/行数据。我使用数据集结果查看器查看了数据表,并根据需要显示。但是这里存在问题,数据行和数据列都在foreach循环中,而我现在得到了#34;集合被修改枚举操作可能无法执行。"。
我在一个数据表中做了所有事情,没有意识到如果这是正确的术语,它会使表不可变或不可修改。我复制了表,并在for循环中尝试向后迭代它作为StackOverflow的建议。但它没有用。所以,我想我可能要创建一个新方法并在其中创建一个新的数据表,然后设置列,实例化数据表并循环遍历原始表。然后将行添加到新表并返回该表。
但我对如何开始这个过程感到迷茫,我有点困惑的是,最好的方法是什么,并且可以使用一些建议。这是我的代码,如果它有帮助。我有很多小扩展方法用于完成大部分工作。感谢您对此事的任何建议!
internal void ParseNames(DataTable ConvertExcelToDataTable)
{
try
{
if (ConvertExcelToDataTable != null && ConvertExcelToDataTable.Rows != null)
{
foreach(DataRow dr in ConvertExcelToDataTable.Select())
{
foreach(DataColumn col in ConvertExcelToDataTable.Columns)
{
ConvertExcelToDataTable.AcceptChanges(); //initial DataTable Save
dr.Table.Columns.RemoveItem("LOB");
dr.Table.Columns.RemoveItem("UMID");
dr.Table.Columns.RemoveItem("MBR_SEX");
dr.Table.Columns.RemoveItem("DOS");
dr.Table.Columns.RemoveItem("Measures");
dr.Table.Columns.RemoveItem("ProjectName");
dr.Table.Columns.RemoveItem("Project Name");
dr.Table.Columns.RemoveItem("MemberKey");
dr.Table.Columns.RemoveItem("MSR_KEY");
dr.Table.Columns.RemoveItem("PRV_LAST");
dr.Table.Columns.RemoveItem("PRV_FIRST");
dr.Table.Columns.RemoveItem("PRV_MI");
dr.Table.Columns.RemoveItem("LocationName");
dr.Table.Columns.RemoveItem("Request ID");
dr.Table.Columns.RemoveItem("Measure(s)");
dr.Table.Columns.ReplaceItem("", "3");
dr.Table.Columns.ReplaceItem(" ", "3");
dr.Table.Columns.RenamingColumnValue("PERS_FIRST_NAME", "First_Name");
dr.Table.Columns.RenamingColumnValue("FirstName", "First_Name");
dr.Table.Columns.RenamingColumnValue("MBR_FIRST", "First_Name");
dr.Table.Columns.RenamingColumnValue("MBR_LAST", "Last_Name");
dr.Table.Columns.RenamingColumnValue("LastName", "Last_Name");
dr.Table.Columns.RenamingColumnValue("Gender", "Gender");
dr.Table.Columns.RenamingColumnValue("MBR_SEX", "Gender");
dr.Table.Columns.RenamingColumnValue("PERS_MID_INIT", "Middle_Initial");
dr.Table.Columns.RenamingColumnValue("MBR_MI", "Middle_Initial");
dr.Table.Columns.RenamingColumnValue("BIRTHDATE", "Date_of_Birth");
dr.Table.Columns.RenamingColumnValue("PatientDOB", "Date_of_Birth");
dr.Table.Columns.RenamingColumnValue("DOB", "Date_of_Birth");
dr.Table.Columns.RemoveSpecialCharacters("(");
dr.Table.Columns.RemoveSpecialCharacters(")");
dr.Table.Columns.RemoveSpecialCharacters(",");
dr.Table.Columns.RemoveSpecialCharacters("=");
dr.Table.Columns.RemoveSpecialCharacters("!");
dr.Table.Columns.RemoveSpecialCharacters("-");
dr.Table.Columns.SplitPatientData("Patient Name");
dr.Table.Columns.SplitPatientData("PatientName");
dr.Table.Columns.SplitPatientData("Patient, Name");
dr.Table.Columns.RenamingColumnValue("Patient", "First_Name");
dr.Table.Columns.RenamingColumnValue("Name", "Last_Name");
SplitPatientRowData(ConvertExcelToDataTable);
dr.Table.Columns.RemoveItem("Patient Name");
ReverseRowsInDataTable(ConvertExcelToDataTable);
ConvertExcelToDataTable.AcceptChanges();
}
}
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
}
答案 0 :(得分:0)
您所做的基本上是将DataTable
转换为另一个DataTable
。您可以创建新的DataTable
并从方法返回它,而不是修改现有的internal DataTable ParseNames(DataTable ConvertExcelToDataTable)
{
if (ConvertExcelToDataTable == null && ConvertExcelToDataTable.Rows == null)
{
return null;
}
var output = new DataTable();
// Add columns here
try
{
foreach(DataRow dr in ConvertExcelToDataTable.Select())
{
// Add rows here
}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
throw;
}
return output;
}
。这样,您就不会在迭代时修改DataTable。
<input type="submit" class="MainButton" title="Change" id="ch01_changebutton" onclick="window.location.href='https://www.websiteurl.com'; return false;" value="Change" name="ch01$changebutton">