ListViewDataItem设置属性中的标签会影响所有标签

时间:2009-08-28 21:52:32

标签: asp.net

我有一个名为“lvQuestions”的列表视图,其上有一个标签(称为lblMissingField)和其他几个字段。当用户尝试回发页面时,我调用一个首先设置ALL lvlMissingField.Text = string.empty的例程,然后验证ListViewDataItem中的“其他”字段是否已填写。如果它们尚未填充,我设置特定的listview的lvlMissingField.Text = "*"用“*”直观地标记它们(注意:不使用标准的asp.net验证器)。

那么,会发生什么?显示每个lblMissingField.Visible,我在这里缺少什么?

foreach(ListViewDataItem question in unansweredQuestions)
{
    ((Label)question.FindControl("lblMissingField")).Text = "*";
}

我已经确定unansweredQuestions只是那些我想要的ListViewDataItems,但仍然很惊讶看到输出HTML将它们全部设置为“*”......?

我也试过设置Visible = true而不是将文本设置为'*'(这是我最初的偏好)而没有任何运气。

在这里有点生气......

1 个答案:

答案 0 :(得分:0)

当我需要执行类似于您正在执行的功能并且更新/检查是在服务器端完成时,我已经为我想要自定义的每个控件实现了一个DataBinding方法。当某些东西发生变化时,我会重新修改我的模型,并更新需要更改的部分。

因此,例如在您的情况下假设我绑定到具有以下详细信息的对象列表(可能是DataTable或其他):

public class MyData
{
    public string Question { get; set; }
    public string Answer { get; set; }
}
public List<MyData> listOfMyData = GetListOfMyData();

然后我的标签上的数据绑定事件将被实现

<asp:Label ID="lblMissingField" runat="server" OnDataBinding="lblMissingField_DataBinding" />

然后执行数据绑定:

protected void lblMissingField_DataBinding(object sender, System.EventArgs e)
{
    Label lbl = (Label)(sender);
    lbl.Text = (Eval("Answer").ToString() == string.Empty) ? "*" : string.Empty;
}

这使您可以对模板中的每个项目进行大量控制。在加载数据后,您不必处理所有控件,而是可以在绑定数据时修改数据。

我知道这不是解决您确切问题的方法,但可能只是建议另一种解决问题的方法。