我希望能够向面板添加多个标签控件并在onlick事件中显示它们.我的代码第一次做了我想要的,然后在第二个onlick事件上用新标签替换标签,依此类推.
这是我到目前为止:
private void createTaskLabel(Guid GoalID, string Goal)
{
Label taskLabel = new Label();
taskLabel.ID = GoalID.ToString();
taskLabel.Text = Goal.ToString();
TaskPanel.Controls.Add(taskLabel);
}
Run Code Online (Sandbox Code Playgroud)
因此,例如,这会创建一个带有唯一ID的新标签(在别处处理)并将其放置在面板中并显示它.当onlick再次触发时,只需更换相同的标签,而不是在其下方出现的新标签.
回发后不会保留动态创建的控件.您需要跟踪已生成的控件数量,并且每次都要重新生成所有这些控件,以便按照您的需要进行操作.基本实施:
List<string> LabeIDList = new List<string>();
override SaveViewState(..)
{
if (LabelIDList.Count>0) {
ViewState["LabelDIList"]=LabelIDList;
}
base.SaveViewState(..)
}
override LoadViewState()
{
base.LoadViewState();
if (ViewState["LabelIDList"]!=null) {
LabelIDList = (List<string>)ViewState["LabelIDList"];
}
}
override void OnLoad(..)
{
foreach (string id in LabelIDList)
{
// Make a function essentially like your code in createTaskLabel,
// you can use it there too
RecreateControl(id);
}
}
private void createTaskLabel(Guid GoalID, string Goal)
{
...
// save the ID you just created
LabelIDList.Add(taskLabel.ID);
}
Run Code Online (Sandbox Code Playgroud)
我刚刚意识到这些是你正在创建的标签 - 所以实际上你应该跟踪TextID而不是ID.如果实际ID由于某种原因很重要,那么跟踪它们两者,使用一个List<Tuple<string,string>>.更典型的情况是创建输入控件,但在这种情况下,只要您在OnLoad上或之前重新创建数据,ASP.NET就会保留用户输入的数据(假设启用了ViewState).
| 归档时间: |
|
| 查看次数: |
2716 次 |
| 最近记录: |