我试图删除具有空值的DropDownList项目(在SQL Server中,它们被标记为NULL)。数据源基于LINQ。
这是我使用的代码:
protected void Page_Load(object sender, EventArgs e)
{
DropDownList1.DataSourceID = "LinqDataSource1";
DropDownList1.DataTextField = "localidad";
DropDownList1.DataValueField = "basededatos";
for (int i = 0; i < DropDownList1.Items.Count; i++)
{
if (DropDownList1.Items[i].Value == "")
{
DropDownList1.Items.Remove(DropDownList1.Items[i]);
}
}
}
我该如何解决这个问题?
提前致谢
答案 0 :(得分:1)
您的代码实际上没有检查空值,此代码将删除空字符串和空字符串(不同):
protected void Page_Load(object sender, EventArgs e)
{
DropDownList1.DataSourceID = "LinqDataSource1";
DropDownList1.DataTextField = "localidad";
DropDownList1.DataValueField = "basededatos";
for (int i = 0; i < DropDownList1.Items.Count - 1; i++)
{
if (string.IsNullOrEmpty(DropDownList1.Items[i].Value))
{
DropDownList1.Items.Remove(DropDownList1.Items[i]);
i--;
}
}
}
答案 1 :(得分:1)
我猜你在循环控件的Items
属性时遇到了一个非常典型的问题。首先要澄清的是属性动态查询,这意味着它们是动态值,而不是静态列表。因此,当您删除循环内的某些值时,Property
会更改。这就是为什么你会遇到@Steve提到的尴尬局面。
代码中的另一个问题是:您也使用DropDownList1.Items.Count
作为上限。此值也会动态更改,从而导致列表的遍历不完整。
至少有两种方法可以正确的方式完成任务。 @Steve已经提到了第一种方法,但如果你坚持前进Items
,我想提供另一种解决问题的方法:
var i = 0;
while (i < DropDownList1.Items.Count)
{
if (string.IsNullOrEmpty(DropDownList1.Items[i].Value))
{
DropDownList1.Items.RemoveAt(i);
} else
{
i ++;
}
}
答案 2 :(得分:0)
感谢您的回答,但是他们还没有解决我的问题,因为我的DropDownList项来自DataSource (在这种情况下,基于LINQ),而不是直接添加到HTML代码中。
我不得不使用SQL子句 WHERE ,它允许我过滤具有空值的项目。
问候。