0

Webページにドロップダウンがあり、ユーザーがどのアイテムを選択しても、選択されたインデックスとして常に値0が返されます。DBクエリを使用してドロップダウンにデータを入力しました。そして、私のページのPage_Loadメソッドにデータを入力しています。以下に示すコードは、指定された動作を実行します。int danceid;

    protected void Page_Load(Object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            PopulateDanceDropDown();
        }

    }    

    private void PopulateDanceDropDown()
    {         
        DataTable dt = new DataTable();DataRow row = null;
        dt.Columns.Add("Did", Type.GetType("System.Int32"));
        dt.Columns.Add("DName", Type.GetType("System.String"));    
        var dancer_dance = (from dd in context.DANCER_AND_DANCE
                       where dd.UserId == dancerId
                       select new
                       {
                           Value = dd.DanceId,
                           Text = dd.DanceName

                       }).ToList();    

        foreach (var dndd in dancer_dance)
        {        
            row = dt.NewRow();
            row["Did"] = dndd.Value;
            row["DName"] = dndd.Text;
            dt.Rows.Add(row);    dances.DataSource = dt;    
            dances.DataTextField = dt.Columns[1].ToString();
        if (!IsPostBack)
        {
            dances.DataBind();
        }

    }    
    protected void changeIndex(object o, EventArgs e)
    {
        danceid = dances.SelectedIndex;
    }
    protected void dropthedance(object o, EventArgs e)
    {
        int danceIDFromDropDown = danceid;
        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);
        }
  }

行intdanceIDFromDropDown= danceid; メソッドでは、dropthedanceの値は常に0です。Pleaseeeeeeeeeeeeee誰かを助けてください

4

2 に答える 2

1

インデックスを ID として使用してもよろしいですか? 通常、データベースの実際の ID を DataValueField として設定すると、その方法で値を取得できます。

しかし、インデックスを取得して indexchanged イベントの変数に配置し、その値を別のメソッドで使用しようとしていることに気付きました。danceid は、ここに表示されていない属性であると想定しています。とにかく、値はポストバックを通じて持続しません。デスクトップ アプリケーションのように変数に格納する代わりに、EnableViewState="True" をドロップダウン コントロールに追加してみてください。次に、送信ハンドラーでそのインデックスを直接取得します。または、本当に変数に保存したい場合は、その変数の値をセッションに保存するかキャッシュして永続化し、実際に値を使用するときにそのキャッシュ/セッション変数からプルします。

しかし、繰り返しますが、リスト項目オブジェクト自体に danceid を配置する方が良い方法かもしれません。ID をアイテム インデックスに基づいているとはいえ、特にデータベースからリストにデータを入力する場合は身震いします。なぜなら、ライブラリ内のそのリストに新しいアイテムを追加してから、それらを名前で並べ替えようとするとどうなるかということです...あなたのインデックスは役に立たなくなります。

于 2012-04-07T21:14:42.833 に答える
1

交換

int danceIDFromDropDown = danceid;

int danceIDFromDropDown = dances.SelectedIndex;

それはうまくいくかもしれません。

于 2012-04-07T20:37:39.787 に答える