2016-03-17 3 views
0

Итак, у меня есть DataRelation, как показано ниже:Как удалить все дочерние строки и родителей в DataSet?

Oraciones1 = new DataRelation("Antecedentes", 
     dsPubs.Tables["Consecuente"].Columns["Id"], 
     dsPubs.Tables["Antecedentes"].Columns["Id"]); 
     dsPubs.Relations.Add(Oraciones1); 

где dsPubs является dsPubs = new DataSet() и DataSet имеет две таблицы, которые оба имеют отношение данных. Затем; Я итерация родителей, чтобы получить Чайлдс, просто получить некоторую задачу сделать, как показано в следующем:

foreach (DataRow rowAuthor in dsPubs.Tables["Consecuente"].Rows) {    
    foreach (DataRow rowTitle in rowAuthor.GetChildRows(Oraciones1)) { 

    } 
} 

и то, что я хочу сделать, это удалить все ребенка и родителя от заданного значения, которое передается через функцию (т.е.).

public void function(string value){ 
    foreach (DataRow rowAuthor in dsPubs.Tables["Consecuente"].Rows){    
      foreach (DataRow rowTitle in rowAuthor.GetChildRows(Oraciones1){ 

         if(value==rowTitle["id_d"].ToString()){ 
          //remove all the child and the parent from the specified variable "value" 
         } 

        } 
       } 

} 

Я пытался сделать это с помощью rowTitle.Delete() and rowAuthor.Delete() method, но это, казалось, не будет работать, потому что я думаю, что она удаляет всю таблицу, а время, в течение Еогеасп хотел продолжать, чтобы захватить еще одно значение из таблицы "Consecuente" оно сломалось. Спасибо вам большое!

+0

Вы читали [DataRow.Delete] (https://msdn.microsoft.com/en-us/library/system.data.datarow.delete%28v=vs.110%29.aspx? f = 255 & MSPPError = -2147217396) Замечания? Вы не можете использовать этот метод в цикле foreach. См. Также [this] (http://stackoverflow.com/questions/2341580/safely-removing-datarow-in-foreach) сообщение. –

+0

true, вы не можете вызвать .Delete() в цикле foreach, но вы можете добавить строки, которые хотите удалить, в отдельный список, а затем вызвать delete после этого. Я отправлю ответ ... –

ответ

0
var innerRows = new List<DataRow>(); 
var outerRows = new List<DataRow>(); 

foreach (DataRow rowAuthor in dsPubs.Tables["Consecuente"].Rows) 
{ 
    foreach (DataRow rowTitle in rowAuthor.GetChildRows(Oraciones1)) 
    { 
     if (value == rowTitle["id_d"].ToString()) 
     { 
     //remove all the child and the parent from the specified variable "value" 
     innerRows.Add(rowTitle); 
     outerRows.Add(rowAuthor); 

     } 

    } 
} 

foreach(DataRow row in innerRows) 
{ 
    row.Delete(); 
} 

foreach (DataRow row in outerRows) 
{ 
    row.Delete(); 
} 
Смежные вопросы