2016-08-17 57 views
0

下面是我的项目代码示例。 DataSet存储的值为authors first name and last name,具体取决于特定的书籍ID。但是,一本书可以有很多作者。当用户在文本框中键入一些值并按下保存按钮时,应启动两种方法之一。如果来自文本框和数据集的值相同,则第一种方法更新数据库中现有的作者记录。如果不是,则应触发第二种方法,并将新的作者记录添加到数据库中。如何检查TextBox中的值是否存在于DataSet中?

DataSet ds = GetData(queryString); 
Autor autor = new Autor(); 

foreach (DataTable dt in ds.Tables) 
{ 
    foreach (DataRow dr in dt.Rows) 
    { 
     string firstName = dr["First_name"].ToString(); 
     string lastName = dr["Last_name"].ToString(); 
     if (firstName.Trim().ToUpper() == txtFirstName.Text.Trim().ToUpper() && lastName.Trim().ToUpper() == txtLastName.Text.Trim().ToUpper()) 
     { 
     //updating existing author record in the database   
     Autor.UpdateInDatabase(autor);      
     } 
     else 
     { 
     //adding new author record in the database   
     Autor.AddToDatabase(autor); 
     break;     
     } 
    } 
} 

此代码仅适用于匹配值位于第一个数据集行时 - 这显然是错误的。任何人都可以帮助我理解如何遍历数据集,比较所有结果并根据结果 - 选择正确的方法?

+0

从其他条件中删除您的“break”,看看会发生什么 – Shyju

回答

0

只需添加一个布尔标志。

bool itemFound = false; 
foreach (DataTable dt in ds.Tables) 
{ 
    foreach (DataRow dr in dt.Rows) 
    { 
     string firstName = dr["First_name"].ToString(); 
     string lastName = dr["Last_name"].ToString(); 
     if (firstName.Trim().ToUpper() == txtFirstName.Text.Trim().ToUpper() && lastName.Trim().ToUpper() == txtLastName.Text.Trim().ToUpper()) 
     { 
     itemFound = true; 
     break;           
     }    
    } 
} 

if(itemFound) 
    Autor.UpdateInDatabase(autor); 
else 
    Autor.AddToDatabase(autor); 
+0

它现在工作的很完美。谢谢你的帮助! – adros

+0

当然。乐意效劳 :) – DinoMyte

相关问题