0

ユーザーがダンス クラスを登録および追加/削除できるダンス アカデミーの Web サイトを持っています。

特定のダンスをドロップする Web ページでは、特定のユーザーに対して、ドロップダウンに登録済みのダンスが表示されます。

ここで、リストからダンスの 1 つを削除したいと思います。そのため、テーブルとドロップダウンリストから行を削除します。問題は、ユーザーがどれを選択しても、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を保持したい。

4

2 に答える 2

0

ポストバックがない場合 (!IsPostback) にのみ、ドロップダウンリスト項目が生成されるようにします。

また、ビューステートをチェックして、有効になっていることを確認します。ビューステートを無効にしてから、ポストバックでコントロールを再バインドしている場合、選択したアイテムが失われる可能性があります。

また、ドロップダウンリストを自動ポストバックに設定し、選択したインデックス変更イベントを添付して、変更が少なくともそのように送信されているかどうかを確認します。

于 2012-04-07T05:17:03.827 に答える
0

PopulateDanceDropDown() メソッドでドロップダウンをバインドするたびに、ドロップダウンのすべての項目をクリアする必要があります。

dances.Items.Clear();

試してみてください..

于 2012-04-07T05:28:19.323 に答える