使用linq查询将值存储在下拉列表的DataValueField和DataTextField中

时间:2012-04-07 04:50:23

标签: c# asp.net linq

我有一个舞蹈学院的网站,用户可以注册和添加/放弃舞蹈课程。

在为特定用户播放特定舞蹈的网页中,下拉菜单会显示她已注册的舞蹈。

现在我要从列表中删除其中一个舞蹈。所以我将从表中删除行,也从删除列表中删除。问题在于每次具有最低ID(索引)的项目都被删除,无论用户选择哪一项。我想我正在为下拉列表错误地存储DataTextField和DataValueField。代码是:

private void PopulateDanceDropDown()
{       
        // Retrieve the username
        MembershipUser currentUser = Membership.GetUser();
        var username = currentUser.UserName;

        // Retrive the userid of the curren user
        var dancerIdFromDB = from d in context.DANCER
                             where d.UserName == username
                             select d.UserId;

        Guid dancerId = new Guid();
        var first = dancerIdFromDB.FirstOrDefault();
        if (first != null)
        {
            dancerId = first;
        }

        dances.DataSource = (from dd in context.DANCER_AND_DANCE
                                    where dd.UserId == dancerId
                                    select new
                                    {
                                        Text = dd.DanceName,
                                         Value = dd.DanceId
                                    }).ToList();

        dances.DataTextField = "Text";
        dances.DataValueField = "Value";
        dances.DataBind();
    }

    protected void dropthedance(object o, EventArgs e)
    {
        String strDataValueField = dances.SelectedItem.Value;
        int danceIDFromDropDown = Convert.ToInt32(strDataValueField);
        var dancer_dance = from dd in context.DANCER_AND_DANCE
                           where dd.DanceId == danceIDFromDropDown
                           select dd;

        foreach (var dndd in dancer_dance)
        {
            context.DANCER_AND_DANCE.DeleteOnSubmit(dndd);

        }

        try
        {
            context.SubmitChanges();
        }

        catch (Exception ex)
        {
            Console.WriteLine(ex);
        }       
    }

问题在于:

String strDataValueField = dances.SelectedItem.Value;

strDataValueField始终从下拉列表中的舞蹈项ID列表中获取最小ID(默认情况下会发生)。我希望这能保持用户选择的舞蹈的ID。

2 个答案:

答案 0 :(得分:0)

我会确保只有在没有回发的情况下才会生成dropdownlist项目 - if(!IsPostback)。

另外,我会检查viewstate以确保它已启用。如果您正在禁用视图状态,然后在回发时重新绑定控件,则可能会丢失所选项目。

我还会尝试将下拉列表设置为autopostback并附加选定的索引更改事件,以查看更改是否至少以这种方式发送。

答案 1 :(得分:0)

每当你在PopulateDanceDropDown()方法中绑定下拉列表时,你必须清除所有下拉项。

dances.Items.Clear();

尝试这可能对你有帮助..