C# 数据转发器中的文本框变为不可见,在滚动期间不会保留其视图

C# 数据转发器中的文本框变为不可见,在滚动期间不会保留其视图,c#,data-binding,datarepeater,C#,Data Binding,Datarepeater,我使用DataRepeater创建了一个表单,并且我有一个XML文件,可以反序列化到一个类中。然后,我创建了一个数据集来表示该类。我将数据集绑定到我的数据转发器。我还创建了一些标签和文本框,并将它们绑定到数据集中的适当数据 以下是代码: TagLabel.DataBindings.Add("Text", ds, "Tag"); PrecedenceLabel.DataBindings.Add("Text", ds, "Precedence"); DataTypeLabel.DataBin

我使用
DataRepeater
创建了一个表单,并且我有一个XML文件,可以反序列化到一个类中。然后,我创建了一个
数据集
来表示该类。我将
数据集
绑定到我的
数据转发器
。我还创建了一些标签和文本框,并将它们绑定到数据集中的适当数据

以下是代码:

 TagLabel.DataBindings.Add("Text", ds, "Tag");
 PrecedenceLabel.DataBindings.Add("Text", ds, "Precedence"); 
 DataTypeLabel.DataBindings.Add("Text", ds, "DataType");           
 LengthLabel.DataBindings.Add("Text", ds, "Length");           
 ValueTextBox.DataBindings.Add("Text", ds, "Value");           
 MaxTextBox.DataBindings.Add("Text", ds, "Maximum");           
 MinTextBox.DataBindings.Add("Text", ds, "Minimum");           
 OverflowTextBox.DataBindings.Add("Text", ds,"OverflowBehaviour");

 bindingsource.DataSource = ds;
 dataRepeater.DataSource = bindingsource;
 dataRepeater.DataMember = "Preference";
for (int i = 0; i < dataRepeater.ItemCount; i++)            
{          
dataRepeater.CurrentItemIndex = i;

 if (((Label)dataRepeater.CurrentItem.Controls["DataTypeLabel"]).Text == "AutoIncrement")                
 {                    
 ((TextBox)dataRepeater.CurrentItem.Controls["ValueTextBox"]).Visible = false;           
 }    
 }
在此之后,我想隐藏
ValueTextbox
,如果它是
DataTypeLebel
“自动输入”
。以下是代码:

 TagLabel.DataBindings.Add("Text", ds, "Tag");
 PrecedenceLabel.DataBindings.Add("Text", ds, "Precedence"); 
 DataTypeLabel.DataBindings.Add("Text", ds, "DataType");           
 LengthLabel.DataBindings.Add("Text", ds, "Length");           
 ValueTextBox.DataBindings.Add("Text", ds, "Value");           
 MaxTextBox.DataBindings.Add("Text", ds, "Maximum");           
 MinTextBox.DataBindings.Add("Text", ds, "Minimum");           
 OverflowTextBox.DataBindings.Add("Text", ds,"OverflowBehaviour");

 bindingsource.DataSource = ds;
 dataRepeater.DataSource = bindingsource;
 dataRepeater.DataMember = "Preference";
for (int i = 0; i < dataRepeater.ItemCount; i++)            
{          
dataRepeater.CurrentItemIndex = i;

 if (((Label)dataRepeater.CurrentItem.Controls["DataTypeLabel"]).Text == "AutoIncrement")                
 {                    
 ((TextBox)dataRepeater.CurrentItem.Controls["ValueTextBox"]).Visible = false;           
 }    
 }
for(int i=0;i
在我完成这项工作并运行项目之后,在本例中,根据我的XML文件,我希望只有数据中继器第5行的
ValueTextBox
被隐藏。但是,当我滚动表单时。我可以看到其他一些行显示不可见的
VallueTextBox
。更糟糕的是,当我上下滚动时,隐藏的文本框无处不在。有人能告诉我我做错了什么吗


我还尝试了虚拟模式,并根据事件处理程序中的条件更新控件,使textbox不可见。
DataerRepeater\u ItemValueRequired,同样的问题也会出现。

如果在条件语句中设置属性,例如If…Then,还必须使用Else子句指定不满足条件时的外观。 试试这个:

if (((Label)dataRepeater.CurrentItem.Controls["DataTypeLabel"]).Text    == "AutoIncrement")                  
{                      

 ((TextBox)dataRepeater.CurrentItem.Controls["ValueTextBox"]).Visible = false;             

}      

else
{
 ((TextBox)dataRepeater.CurrentItem.Controls["ValueTextBox"]).Visible = true;         
}