我在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");
}
}
答案 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;