2015-07-03 96 views
0

我做了一个代码,检查我的DataGrid中是否已经存在一个特定的元素。 如果元素已经添加到DataGrid中,则该代码会向用户显示一个弹出窗口。这是代码:如何检查数据网格中是否已经存在一个元素

if (grid.Items.Count > 0) 
        { 
         for (int i = 0; i < grid.Items.Count; i++) 
         { 

         if (((Teams.Club_Information)grid.Items[i]).name == reader["name"].ToString()) 
         { 
           MessageBox.Show("La squadra è già stata inserita!"); 
          } 
          else 
          { 
           MainWindow.AppWindow.Squadre_DataGrid.Items.Add(new Teams.Club_Information 
           { 
            name = reader["name"].ToString(), 
            code = reader["code"].ToString(), 
            shortName = reader["shortName"].ToString(), 
            squadMarketValue = reader["SquadMarketValue"].ToString() 
           }); 
          } 
         } 
        } 
        else 
        { 
         MainWindow.AppWindow.Squadre_DataGrid.Items.Add(new Teams.Club_Information 
         { 
          name = reader["name"].ToString(), 
          code = reader["code"].ToString(), 
          shortName = reader["shortName"].ToString(), 
          squadMarketValue = reader["SquadMarketValue"].ToString() 
         }); 
        } 

在第一个条件我检查是否有行的DataGrid中,如果条件为真,那么我通过DataGrid的元素进行迭代。 现在的问题是,我比较一个网格项目与属性“名称”的读者。 reader是查询结果元素的读取变量(sqlite)。 还有另一种方法来检查我的DataGrid的列名称,如果该元素已被添加?

回答

1

您的项目类型为“Teams.Club_Information”,但您将它们与作为字符串的reader [“name”]进行比较。除非你写了一个将Club_Information.name与一个字符串进行比较的Equals方法,否则比较总是失败。

尝试,而不是:

if (((Teams.Club_Information)grid.Items[i]).name == reader["name"]) 
+0

我看不到。名称变量中的条件 –

+0

您需要一种方法来比较你的读者[“name”]字符串值添加到您的Club_Information对象。您是否考虑过将公开名称属性添加到您的Club_Information类中,这会暴露名称值?看来你目前还没有办法将你的俱乐部的名字与你在读者中获取的名字进行比较。 – Wibbler

+1

只是将该物品投射到实际类型: 'var item =(Teams.Club_Information)grid.Items [i];如果(item.name == reader [“name”])' – Liero

1

你可以做这样的事情

 if(grid.Items.Contains(reader["name"])) 
     { 
     MessageBox.Show("team already added"); 
     } 
     else 
     { 
       MainWindow.AppWindow.Squadre_DataGrid.Items.Add(new Teams.Club_Information 
       { 
        name = reader["name"].ToString(), 
        code = reader["code"].ToString(), 
        shortName = reader["shortName"].ToString(), 
        squadMarketValue = reader["SquadMarketValue"].ToString() 
       }); 
     } 
+0

解决方案看起来不错,但如果我添加相同的值作为消息出现,然后条件不成立,为什么? –

+0

解决方案是错误的。读者[“姓名”]永远不是项目 – Liero

1
var name = reader["name"]; 
var isNamePresent = grid.Items 
    .Cast<Teams.Club_Information>() 
    .Any(item => item.name == name); 

if (isNamePresent) ... else ... 
+0

姓氏,在红色下划线后。用什么来替换姓?也许结构ClubInformation的变量名称?或与读者的名称参数? –

+0

编译器说什么? – Liero

+0

我在我的答案中将'item.Name'更改为'item.name'。顺便说一下,智能感很有帮助 – Liero

相关问题