Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中从数据表中删除行#_C#_Datatable - Fatal编程技术网

C# 在C中从数据表中删除行#

C# 在C中从数据表中删除行#,c#,datatable,C#,Datatable,我正在搜索PDF文件中的关键字,并返回找到该关键字的页面。如果找到关键字,我将返回页面列表和文件名。但是,如果在PDF文件中找不到关键字,我想删除datatable中的行 public DataTable dtPubSearchResultsFromFiles(string sqlQuery, string safeKeyword) { // Returns a datatable of publication search results based on PDF files.

我正在搜索PDF文件中的关键字,并返回找到该关键字的页面。如果找到关键字,我将返回页面列表和文件名。但是,如果在PDF文件中找不到关键字,我想删除datatable中的行

public DataTable dtPubSearchResultsFromFiles(string sqlQuery, string safeKeyword)
{
    // Returns a datatable of publication search results based on PDF files.
    SqlConnection con = new SqlConnection(getConnectionString());
    SqlCommand cmd = new SqlCommand(sqlQuery, con);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    dt.Columns.Add("Pages", typeof(string));
    da.Fill(dt);
    dt.PrimaryKey = new DataColumn[] { dt.Columns["publicationID"] };

    foreach (DataRow row in dt.Rows)
    {
        //call search function to look for keyword
        List<int> myPages = new List<int>();
        string fileName = row["linkToPublicationPDF"].ToString();
        myPages = ReadPdfFile(fileName, safeKeyword);
        if (myPages.Count > 0)
        {
            string pagelist = "";
                foreach (int page in myPages)
                {
                    pagelist = pagelist + page + "  ";
                }
            row["Pages"] = pagelist;
        }
        else
        {
            //remove/delete the row from the datatable if "myPages.Count" is 0
            dt.Rows.Remove(row);
        }
    }

    return dt;
}
公共数据表dtPubSearchResultsFromFiles(字符串sqlQuery,字符串safeKeyword) { //返回基于PDF文件的出版物搜索结果的datatable。 SqlConnection con=新的SqlConnection(getConnectionString()); SqlCommand cmd=新的SqlCommand(sqlQuery,con); SqlDataAdapter da=新的SqlDataAdapter(cmd); DataTable dt=新的DataTable(); 添加(“页面”,类型(字符串)); da.填充(dt); dt.PrimaryKey=newdatacolumn[]{dt.Columns[“publicationID”]}; foreach(数据行中的数据行) { //调用搜索函数查找关键字 List myPages=新列表(); 字符串文件名=行[“LinkTopPublicationPDF”]。ToString(); myPages=ReadPdfile(文件名、关键字); 如果(myPages.Count>0) { 字符串pagelist=“”; foreach(myPages中的整版页面) { 页面列表=页面列表+页面+“”; } 行[“页面”]=页面列表; } 其他的 { //如果“myPages.Count”为0,则从数据表中删除/删除该行 dt.行。删除(行); } } 返回dt; } 当我添加这个(“dt.Rows.Remove(row)”)时,当页面被称为“System.InvalidOperationException:集合被修改;枚举操作可能无法执行”时,我会出现此错误

建议?评论?修复?欢迎大家

Bob

尝试一个简单的删除

row.Delete();
然后在循环之后

dt.AcceptChanges();
但它可能会失败
参见马里奥的答案
如果它实际上只是将行标记为删除,那么它可能会起作用

尝试简单的删除

row.Delete();
然后在循环之后

dt.AcceptChanges();
但它可能会失败
参见马里奥的答案
如果它实际上只是标记要删除的行,那么它可能会工作

您的代码正在从数据库中获取一些数据,以便您的程序可以使用它

您遇到的异常是,您正在修改(通过删除元素)正在迭代的集合,而这是不可能的

您可以通过创建一个临时的
列表来解决这个问题,您可以在其中存储要删除的行。完成迭代后,您可以在临时列表上进行迭代,并删除您决定不再需要的内容

var toRemove = new List<DataRow>();
foreach (DataRow row in dt.Rows)
{
    //call search function to look for keyword
    List<int> myPages = new List<int>();
    string fileName = row["linkToPublicationPDF"].ToString();
    myPages = ReadPdfFile(fileName, safeKeyword);
    if (myPages.Count > 0)
    {
        string pagelist = "";
        foreach (int page in myPages)
        {
            pagelist = pagelist + page + "  ";
        }
            row["Pages"] = pagelist;
        }
        else
        {
            //remove/delete the row from the datatable if "myPages.Count" is 0
            toRemove.Add(row);
        }
    }
}
foreach (DataRow row toRemove.Add)
{
    dt.Rows.Remove(row);
}
var toRemove=new List();
foreach(数据行中的数据行)
{
//调用搜索函数查找关键字
List myPages=新列表();
字符串文件名=行[“LinkTopPublicationPDF”]。ToString();
myPages=ReadPdfile(文件名、关键字);
如果(myPages.Count>0)
{
字符串pagelist=“”;
foreach(myPages中的整版页面)
{
页面列表=页面列表+页面+“”;
}
行[“页面”]=页面列表;
}
其他的
{
//如果“myPages.Count”为0,则从数据表中删除/删除该行
删除。添加(行);
}
}
}
foreach(DataRow-row-toRemove.Add)
{
dt.行。删除(行);
}
您的代码正在从数据库中获取一些数据,以便您的程序可以使用这些数据

您遇到的异常是,您正在修改(通过删除元素)正在迭代的集合,而这是不可能的

您可以通过创建一个临时的
列表来解决这个问题,您可以在其中存储要删除的行。完成迭代后,您可以在临时列表上进行迭代,并删除您决定不再需要的内容

var toRemove = new List<DataRow>();
foreach (DataRow row in dt.Rows)
{
    //call search function to look for keyword
    List<int> myPages = new List<int>();
    string fileName = row["linkToPublicationPDF"].ToString();
    myPages = ReadPdfFile(fileName, safeKeyword);
    if (myPages.Count > 0)
    {
        string pagelist = "";
        foreach (int page in myPages)
        {
            pagelist = pagelist + page + "  ";
        }
            row["Pages"] = pagelist;
        }
        else
        {
            //remove/delete the row from the datatable if "myPages.Count" is 0
            toRemove.Add(row);
        }
    }
}
foreach (DataRow row toRemove.Add)
{
    dt.Rows.Remove(row);
}
var toRemove=new List();
foreach(数据行中的数据行)
{
//调用搜索函数查找关键字
List myPages=新列表();
字符串文件名=行[“LinkTopPublicationPDF”]。ToString();
myPages=ReadPdfile(文件名、关键字);
如果(myPages.Count>0)
{
字符串pagelist=“”;
foreach(myPages中的整版页面)
{
页面列表=页面列表+页面+“”;
}
行[“页面”]=页面列表;
}
其他的
{
//如果“myPages.Count”为0,则从数据表中删除/删除该行
删除。添加(行);
}
}
}
foreach(DataRow-row-toRemove.Add)
{
dt.行。删除(行);
}

谢谢Marios。这似乎解决了我问题的第一部分。谢谢马里奥斯。它似乎解决了我问题的第一部分。