删除具有空值的DropDownList项

时间:2014-08-16 13:29:23

标签: c# asp.net linq

我试图删除具有空值的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]);
        }
    }
}

我该如何解决这个问题?

提前致谢

3 个答案:

答案 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 ,它允许我过滤具有空值的项目。

问候。