checkbox.Visible = false;但它还在吗?

时间:2012-01-09 18:04:06

标签: c# asp.net

我在C#中有一个Datalist,有很多复选框和名字。单击按钮时,首先,表中的所有数据都将被删除,对于每个选中的复选框,ID都会再次插入表格中。这很好用。

问题是当我只显示某些复选框时,例如firstname是John。显示所有带有ID的复选框,但只有包含John的复选框才是可见的。如果我再检查几个复选框并单击按钮,则所有行都会被删除,然后我的想法是可见的复选框= false; Stil在那里,并再次插入。但他们不是......

还有另一种方法可以做到这一点,就像我想要的那样吗?

    protected void Page_Load(object sender, EventArgs e)
{
    GetEmployee();
    CompareEmployee();
}

private void GetEmployee()
{

string FirstName = table.Rows[i]["FirstName"].ToString();
string qs = (Request.QueryString["search"].ToString());


 DataTable table = SearchPerson(search);
 for (int i = 0; i < table.Rows.Count; i++)
    {

        CheckBox checkbox = new CheckBox();
        checkbox.ID = table.Rows[i]["UserID"].ToString();
        checkbox.Visible = false;

        HyperLink hlFirstName = new HyperLink();
        hlFirstName.Text = table.Rows[i]["FirstName"].ToString();            
        hlFirstName.Visible = false;


        string FirstName = table.Rows[i]["FirstName"].ToString();            
        string qs = (Request.QueryString["search"].ToString());

        if (qs.Contains(FirstName))
        {
            checkbox.Visible = true;
            hlFirstName.Visible = true;                
        }

        phEmployee.Controls.Add(checkbox);
        phEmployee.Controls.Add(hlFirstName);

    }
}

private void CompareEmployee()
{
    int UserID = ((User)Session["LoggedInUser"]).UserID;
    DataTable table = new DataTable();
    table = GetEmployee(UserID);

    foreach (Control c in phEmployee.Controls)
    {
        if (c.GetType() == typeof(CheckBox))
        {
            for (int i = 0; i < table.Rows.Count; i++)
            {
                if (c.ID == table.Rows[i][0].ToString())
                {
                    (c as CheckBox).Checked = true;
                }
            }
        }
    }
}

protected void btnUpdate_Click(object sender, EventArgs e)
{
    int UserID = ((User)Session["LoggedInUser"]).UserID;
    {            
        DeleteEmployee(UserID);

        foreach (Control c in phEmployee.Controls)
        {
            if (c.GetType() == typeof(CheckBox))
            {
                if ((c as CheckBox).Checked)
                {
                    AddEmployee(c.ID, UserID);
                }
            }
        }
        Response.Redirect("Default.aspx");
    }
}

4 个答案:

答案 0 :(得分:3)

复选框仍然存在。但他们不一定经过检查。根据您的描述,听起来不可见的未选中框会导致记录被删除。

答案 1 :(得分:3)

Visible设置为false不会导致复选框消失在某个空白处,它仍然存在于您的Controls集合中。我会避免以这种方式使用UI的状态,而是处理CheckedChanged事件并设置一些内部数据结构来告诉您当前的状态。

另外,避免进行两次演员表演。你可以简单地做

var chk = c as CheckBox;
if( c != null )
{
    AddEmployee(c.ID, UserID);
}

答案 2 :(得分:1)

;后面有一个if(),基本上关闭了该声明:if (qs.Contains(FirstName));以下括号始终执行。您可能还缺少隐藏复选框的代码,但这不在上面的代码中。

答案 3 :(得分:0)

在C#中我使用了它并且它起作用了。希望它有所帮助!

_checkBoxName.Visibility = System.Windows.Visibility.Visible;