c#.net winform应用程序中使用sql server的事件处理

时间:2011-03-08 10:17:11

标签: c# .net sql sql-server sql-server-2005

我有一个带有SQLusers列表的组合框,它们具有事先授予的权限。 包含PERMISSION_DETAIL列的username表,permission_name包含已授予或拒绝的权限的详细信息

现在当用户从组合框中选择一个SQLuser时,权限将显示为一个复选框,如果已经授予了权限,则会出现复选框并检查其勾号,否则为UNCHECKED。

为此我使用:

if(permission is previously granted)

checkbox1.checked = true;   // here the Checkbox_CheckChanged event is called, but i dont want to call it.
checkbox1.enabled = false;

现在,除了复选框外,还有一个按钮,点击它后,复选框被启用,即修改权限,用户将点击按钮。

现在,用户将勾选或取消勾选复选框以授予或拒绝权限以及复选框更改事件

将被调用,这没关系。

我希望当复选框出现时,会自动检查其勾号,但这会调用 checkbox_Checkchanged事件,但我不想打电话给那个事件。

4 个答案:

答案 0 :(得分:2)

我建议你将Checkbox_CheckChanged事件更改为Checkbox_Click事件。

private void Checkbox_Click(object sender, EventArgs e)
        {
            if ((sender as CheckBox).Checked)
            {
                MessageBox.Show("checked");
                // add role to user
            }
            else
            {
                MessageBox.Show("un_checked");
                /remove role ffrom user
            }
        }

答案 1 :(得分:1)

在EventHandler中执行任何操作之前,您可以检查复选框是否已启用:

protected void Checkbox_CheckChanged (object sender, ..EventArgs e)
{
    //return if not enabled
    if(!((CheckBox)sender).IsEnabled) return;

    //DO THE REST
}

我认为如果你为CheckChanged创建一个事件处理程序,它应该在“check is changed”时被调用,之后你应该处理逻辑。

答案 2 :(得分:1)

无论如何都会调用该事件,重要的是您如何处理该事件。一个事件已经发生,你不能假装它没有。您唯一能做的就是确定该事件在特定时间点对您来说意味着什么。

例如:

public void chkPermission_CheckChanged(object sender, EventArgs e)
{
    bool isChecked = chkPermission.Checked;
    if (this.user.HasPermission() == isChecked) { return; }
    // otherwise, we need to change some permissions!
}

分析您是否需要做任何事情,并从那里开始。不要盲目地假设某事需要改变因为事件被解雇了。

答案 3 :(得分:-1)

将一个布尔变量IsCheckboxEventShouldFire添加到表单中。最初设置为true。在将复选框设置为自动检查的代码中,现在也将IsCheckboxEventShouldFire设置为false。在checkchanged事件中,首先检查IsCheckboxEventShouldFire是否为true。如果是,请运行您的代码。如果没有,那就不要了。在事件代码的末尾将IsCheckboxEventShouldFire设置为true。