2009-08-28 86 views
0

我有一个名为“lvQuestions”列表视图,其上有一个标签(称为lblMissingField)和一对夫妇等领域。当用户试图投递的页面,我叫一个例程,第一组所有lvlMissingField.Text = string.empty,然后验证,在ListViewDataItem“其他”领域已经排满。如果他们没有被填满我设置了特定的ListView的lvlMissingField.Text = "*"直观地用“*”标记它们(注意:不使用标准的asp.net验证器)。标签在ListViewDataItem设置属性会影响所有标签

那么,会发生什么?显示每个lblMissingField.Visible,我在这里丢失了什么?

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

我所做的unansweredQuestions只是,我希望这些ListViewDataItems,仍然很惊讶看到输出HTML将所有的人都为“*” ......?

我也试着设置Visible = true,而不是没有任何的运气文本设置为“*”(这是我原来的偏好)。

去这里有点疯狂...

回答

0

当我需要做类似于你在做什么,并更新/支票进行服务器端的功能,我已经实现了我希望每个控件的数据绑定的方法自定义。当某些事情发生变化时,我会重新更新我的模型,并更新需要更改的零部件。

因此,例如,你的情况假设我绑定到对象的列表(可以是数据表或其他)具有以下细节:

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; 
} 

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

我知道这不是你的问题相关的一个解决方案,但也许只是另一种方式的建议来解决这个问题。

+0

谢谢!我已经实现了类似的东西,它的工作非常好。我尝试了太多时间试图找出问题的另一种方式 - 这只是没有意义。 – MrFishy 2009-08-31 03:38:56