检查是否正在删除列中具有指定值的最后一行

时间:2013-11-11 11:30:10

标签: c# wpf datagrid dataset

我有一个从DataGrid中删除行的按钮;其中一列是admin列。我需要程序检查正在删除的行(或行,因为它可以删除多行)是Admin = true的最后一行,因为删除最后一个管理员会使该表无法访问。

删除行的代码是:

connection.Open();
List<DataRow> theRows = new List<DataRow>();
for (int i = 0; i < funcDataGrid.SelectedItems.Count; ++i)
{
    Object o = funcDataGrid.SelectedItems[i];
    if (o != CollectionView.NewItemPlaceholder)
    {
        DataRowView r = (DataRowView)o;
        theRows.Add(r.Row);
    }
}
foreach (DataRow r in theRows)
{
    string a = r.Field<string>("usernameFunc");
    cmdSel = new MySqlCommand("DELETE FROM usersFunc WHERE usernameFunc='" 
        + a + "'", connection);
    cmdSel.ExecuteNonQuery();

    int k = ds.Tables["funcionarios"].Rows.IndexOf(r);
    ds.Tables[0].Rows[k].Delete();
}

connection.Close();

请记住,它是从两个连接的表中删除的,因此我无法以通常的方式删除行。

1 个答案:

答案 0 :(得分:1)

您可以拥有一个名为ActiveAdmins的变量(静态或非静态,具体取决于您实现类的方式)。加载Datagrid后,您可以轻松查询数据库并获取管理员数量 我假设你的对象上有一个布尔列IsAdmin

foreach循环中,添加如下内容:

if (r.Field<string>("IsAdmin"))
  if (`ActiveAdmins` <= 1)
      continue;

这样,无论何时删除,如果它是最后一个管理员,它只会转到下一行,将最后一个管理员留在表中。