【问题标题】:If checkbox is checked in datagrid in C#如果在 C# 中的数据网格中选中复选框
【发布时间】:2013-12-15 02:32:22
【问题描述】:

在 datagrid 字段中的 form2 上,我有“admin”,这是一个复选框。当我从 form1 调用 form2 我希望它首先检查此用户(已登录)是否已签入字段“admin”。 如果是,则授予用户对 form2 的访问权限,否则返回 form1 并显示一个消息框,说明用户无权访问。

是否应该在 form2 加载时检查“是否已检查”?

编辑:可以这样做吗:

form1:
  call form2 function test

form2:
    function test that checks if the current user has checked the checkbox in the datagrid

【问题讨论】:

    标签: c# winforms checkbox


    【解决方案1】:

    不,如果您在加载中执行检查,那么您可能无法阻止表单出现。

    相反,在 Form1 上放置将执行检查或显示 Form2 的方法?这样,您所有想要显示 Form2 的代码都可以从相同的检查中受益。

    public class Form1
    {
       ...
       public void ShowAdminForm2()
       {
          if (!chkAdmin.IsChecked)
             MessageBox.Show ("Not admin");
          else
             new Form2().ShowDialog();
       }
    }
    

    【讨论】:

    • 这是我的第一个想法。在 form1 上有一个按钮,单击该按钮会将您定向到 form2。问题是当我想比较是否为当前用户检查了管理字段时,我得到了错误。首先你不能去“if (!chkAdmin.IsChecked)”,而是你必须签入datagrid,其次datagrid在form2上并且不允许你查看它。
    • 通常情况下,最好先解释数据库中的数据。能否获取数据的规范形式,然后检查数据中的权限,而不是等待加载控件?
    【解决方案2】:

    从我的理解到您的要求,您可以通过多种方式做到这一点。如果用户具有管理员访问权限,您可以检查 form2 的加载事件,或者您可以从 form1 执行检查,并在创建 form2 实例之前检查用户是否具有管理员访问权限。

    【讨论】:

    • 简而言之,应该在form2上。问题是我无法检查是否在加载时选中了复选框,因为同时填充了数据网格。所以它应该在那之后出现,但如果这个用户(登录的用户)没有管理员权限,它仍然不应该显示表单(form2)。
    【解决方案3】:

    有两种选择。首先,将状态从 DataGrid 读取到 CheckBox 中,例如:

    CheckBox.Checked = GridView.Rows[0].Cells[Index.Of.CheckBox]
    

    或者你应该 TypeCast:

    if ((CheckBox)GridView.Rows[0].Cells[Index.Of.CheckBox]).Checked)
        DoWhatEverYouWant
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-22
      • 1970-01-01
      • 2012-03-04
      • 2020-12-16
      • 2011-01-24
      • 2012-03-11
      • 1970-01-01
      相关资源
      最近更新 更多