我有一个从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();
请记住,它是从两个连接的表中删除的,因此我无法以通常的方式删除行。
答案 0 :(得分:1)
您可以拥有一个名为ActiveAdmins
的变量(静态或非静态,具体取决于您实现类的方式)。加载Datagrid后,您可以轻松查询数据库并获取管理员数量
我假设你的对象上有一个布尔列IsAdmin
。
在foreach
循环中,添加如下内容:
if (r.Field<string>("IsAdmin"))
if (`ActiveAdmins` <= 1)
continue;
这样,无论何时删除,如果它是最后一个管理员,它只会转到下一行,将最后一个管理员留在表中。