-1

ユーザーが削除ボタンをクリックしても何も起こらず、チェックするブレークポイントを挿入すると、The selectLocStationis null という問題が発生しました。なぜそれが起こっているのですか?誰かがそれについての私の疑問を親切に解決できますか?

私の削除コードを表示するためのコードは次のとおりです。提供された助けに感謝します。

private void btnDel_Click(object sender, EventArgs e)
{
    using (satsEntities Setupctx = new satsEntities())
    {
        int selectLocStation = Convert.ToInt32(cbLocStation.SelectedValue);

        var DeleteRTiming = 
            (from delLocStation in Setupctx.requiredtimings
             where delLocStation.RequiredLocationStationID == selectLocStation
             select delLocStation).SingleOrDefault();

        if (DeleteRTiming != null)
        {
            Setupctx.DeleteObject(DeleteRTiming);
            Setupctx.SaveChanges();
            cbLocStation.SelectedIndex = -1;
            this.Edit_TS_Load(null, EventArgs.Empty);
            MessageBox.Show("Selected Required Timing And " + 
                                "The Location Station Has Been Deleted.");
        }
    }
}

これはバインドに使用されたコードです。

private void Edit_TS_Load(object sender, EventArgs e)
    {
        using (satsEntities Setupctx = new satsEntities())
        {
            var DeleteRT = (from DelRT in Setupctx.requiredtimings
                            join locationstationname ls in Setupctx.locationstationnames on DelRT.RequiredLocationStationID equals ls.locationstationID
                                select ls.locStatname).Distinct().ToList();

            foreach (var locstationData in DeleteRT)
            {
                cbLocStation.Items.Add(locstationData);
            }

        }
    }
4

4 に答える 4

1

どのselectLocStationように null になることができますか? int 型ですが、例外が発生していますか、それともオブジェクト DeleteRTiming が null ですか? おそらくDeleteRTimingそれはnullです

データベースで探しているレコードがそこにないという単純な答えですselectLocStation

ブレークポイントを設定し、「selectLocStation」によって何が保持されているかを確認し、データベースにレコードが存在するかどうかを手動で確認する必要があります。

于 2012-08-01T08:53:40.233 に答える
0

コントロールをバインドするときは、!に設定する必要があります。IsPostbackを実行し、ViewStateで永続化します

If(! IsPostBack)
{
  BindYourControl(); //For just first load.
}

とどまる

EnableViewState = true;

選択した値を消去しないために

于 2012-08-01T09:01:54.407 に答える
0

これがSilverlightアプリケーションの場合は、cbLocStation.SelectedItemを使用するか、ASP.Netサイトであり、すべてのpageLoadでデータを再バインドすることをお勧めします。

どちらの方法でも、null値を変換しようとしているため、例外が発生するはずです。

于 2012-08-01T09:04:56.640 に答える
0

コンボ ボックスをバインドするために使用したメソッドを参照してください

cbLocStation.Items.Add(locstationData);

これにより、変数「locstationData」の値を持つ「ValueField」と「TextFiled」のコンボボックスが作成されます。したがって、から選択した値を取得しようとするcbLocStation.SelectedValueと、常に名前が含まれるため、整数に解析できません。

Value(Id) と Text(Text to display) を受け入れる "Add" の別のオーバーロードがあります。

 cbLocStation.Items.Add(new ListItem(locstationData.locStatname, locstationData.locStatID));

このように綴じ部分を変えてみてください

于 2012-08-01T09:35:11.200 に答える