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

本文关键字:DataValueField DataTextField 下拉列表 查询 linq 存储 使用 | 更新日期: 2023-09-27 18:30:30

我有一个舞蹈学院的网站,用户可以在其中注册和添加/删除舞蹈课程。

在要删除特定舞蹈的网页中,对于特定用户,下拉列表显示她注册的舞蹈。

现在我想从列表中删除其中一个舞蹈。因此,我将从表和下拉列表中删除该行。问题是每次删除具有最低 ID(索引)的项目时,无论用户选择哪一个。我想我错误地存储了下拉列表的数据文本字段和数据值字段。代码为:

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。

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

我会确保仅在没有回发时才生成下拉列表项 - if (!回发)。

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

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

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

dances.Items.Clear();

尝试这可能会对您有所帮助..