2011-07-06 17 views
1

私は自分のコードビハインドで動的にデータバインドするグリッドビューを持っています。何らかの理由で、がグリッドビューから(カスタム関数を使用して)行を削除した場合にのみ、ポストバック後にグリッドビューがリフレッシュされません(削除された値が残ります)。しかし、ユーザーが別の方法でグリッドビューをリフレッシュする場合(つまり、アイテムを追加したり、別のタブで適切なアイテムを選択したりするなど)、それは結構です。DatabindはリフレッシュしませんGridview

私はコードビハインドに何が起こっているかを見るためにブレークポイントを置き、明らかにgridviewが正しくバインドされていて、削除されたアイテムはgridview.DataSourceではありません。

私のコードはここにありますので、わからない場合は私に知らせてください! [

protected void bindGridView(long thisId) 
    { 
     var query = from items in DataContext.Items 
        where items.SubSomething.Something.SomethingId == thisId && goals.SubSomething.YearId == selectedYearId //<--another static variable 
        select items; 
     Gridview1.DataSource = from items in query.AsEnumerable() 
            select new 
            { 
             items.Field1, 
             items.Field2, 
             items.Field3, 
             Field4 = ((decimal)items.Field4).ToString("N2"), 
             Field5 = ((decimal)items.Field5).ToString("N2"), 
             Field6 = String.Format("{0:#,##0}", (long)items.Field6), 
             Field7 = items.Field4 == null ? "$0.00" : ((decimal)items.Field7).ToString("C"), 
            }; 
     Gridview1.DataBind(); 
    } 

if (e.CommandName == "delete") 
     { 
      int selectedId = int.Parse(e.CommandArgument.ToString()); 
      //delete selected row from database 
      var item = (Item)DataContext.Items.Where(item => item.ItemId == selectedId).Single(); 
      if (item != null) 
      { 
       DataContext.CompanyGoalPrograms.DeleteObject(item); 
      } 
      DataContext.SaveChanges(); 

      bindGridView(currentId); //firing, but not refreshing gv after postback 
      // currentId is a static variable 
     } 

bindGridView方法(他のすべての時間のと呼ばれる動作しますので、私は問題がここにあるとは思わない):

行-コマンドを削除します。編集] 面白いのは、それが実行されるだけでなく、実行後(デバッグ中)にデータソースの内容をチェックすると、実際に削除された項目は、データソースから削除されたです。ユーザーに加えられた変更は表示されません。

+1

ちょうど 'Gridview1.DataSourceは=(....から)をしようと、道の外にそれを得るためにToListメソッド();'とそれはどんな違いがあればご覧ください。 –

+0

あなたのgridviewはAJAXの更新パネルにありますか? –

+0

@Bala R nope ...まだ表示されています –

答えて

5

私はこの問題を考え出し:

Gridviewsは、このような「選択」、「編集」として設定し、定義済みのコマンドを、持っている、と「削除」。コマンド名 'delete'で実行する独自のイベントを定義しようとすると、プログラムは事前定義されたイベントと一緒に自分のイベントの一部を実行しようとします。これが問題の原因となっています。

0

bindgridview getが確実に実行されましたか?確認するためにデバッグモードで実行しましたか?

+0

はい。面白いのは、実行するだけでなく、データソースの内容を確認したとき(デバッグ中)、実際に削除された項目はデータソースから削除されます。ユーザーに変更を表示する –

1

それは私の場合も全く問題でした。私はasp:ImageButtonのCommandNameとして "Delete"を渡していました。あなたの投稿を見た後、私は "DeleteThis"を渡すように変更し、すぐに作業を開始しました。これらのような予約語の問題は....!

実際に解決策を投稿していただきありがとうございます。それは少なくとも一人の人を助けました。

ビクターデルPreteの

関連する問題