0

我有一个从 DataGrid 中删除行的按钮;其中一列是管理列。我需要程序检查被删除的行(或行,因为它可以删除多行)是否是最后一个 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();

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

4

1 回答 1

1

您可以有一个名为ActiveAdmins. 加载 Datagrid 后,您可以轻松查询数据库并获取管理员数量。
我假设您IsAdmin的对象上有一个布尔列。

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

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

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

于 2013-11-11T11:49:10.723 回答