2010-12-03 10 views
2

私はupdatepanel内にgridviewを持っています。その行にはその行を削除する削除ボタンがあります。updatepanel内のgridview deleteコマンドと別の__doPostback()機能

他の場所では、行を挿入するコードを実行します。この挿入に続いて、私はupdatepanelのIDで__doPostback()を実行し、次にupdatepanelのload()イベントでgridviewでdatabind()を呼び出します。

__doPostback()とdatabindを実装すると、組み込みのgridviewの削除が機能しなくなります。 :(行を追加するときの実際のリフレッシュ/データバインドはうまく機能します。

どうすればいいですか?削除ボタンをクリックすると、データバインドがinbuildの削除/更新機能と競合している?

おかげ

EDIT:!質問は十分に説明されていない場合の謝罪は...

は基本的に、私はGridViewのを持っているしたい内蔵の削除機能など、データソースとコマンド欄を通じて私はこのパネルを別に更新したいと思っていますが、私がt彼の別の更新コード(updatepanel.loadのgridview.databind)は標準の削除機能を破ります。期待どおりです:)

+0

行を挿入するために実行するコードを投稿できますか?そのコードは削除ボタンをクリックした直後に実行されますか?私はこれらの2つの出来事がどのように関連しているかはよく分かりません。 – jwiscarson

+0

インサートは、USINGブロック内の単純なsqlCommandの後に、メインのgridviewをパラメータとするupdatepanelで__doPostbackを実行するClientScript.RegisterStartupScriptが続きます。このコードはdeletebuttonとは無関係です。これはsqldatasourceやdeletecommandなどのgridviewに「組み込み」されています。 –

+0

さらなるコメント - レコードを挿入するために使用される外部コードを無視して、私が使用したコードは干渉している可能性がありますgridview deleteはupdatepanelのload()ルーチンにあります。ここでは、gridview.databind()を実行します。 「sys.webforms.pagerequestmanagerservererrereception:無効なポストバックまたはコールバック引数」という問題が発生したことに気づいた。歓迎 –

答えて

0

あなたは、UpdatePanelModeを条件として配置し、挿入ブロック中にClientScript.RegisterStartupScriptの他にUpdatePanel.Update()を使用しようとしましたか?

+0

こんにちは、clientscriptのアプローチを無視して(これは私が別のaspxページから更新を実行しているためです)、私はUpdatePanel内でGridViewをラップし、この更新でDataBindを呼び出すと、 。私は(私は思う?)なぜそれが起こっているが、それを避ける方法を考えることができない見ることができます! –

0

私は問題がイベントがGridViewの内部にあり、ボタンのように簡単にアクセスできないと考えています。 Asyncイベントを作成するためにGridViewを登録するには、ScriptManagerにアタッチする必要があります。

これを行うにはRegisterAsyncpostBackControlメソッドを使用します。

これは一般的な考え方です。あなたは、私がこれをやったので、

protected void Page_Load() 
{ 
    ScriptManager1.RegisterAsyncPostBackControl(GridView1); 
} 

それはしばらくしているが、あなたは「ドン除いて、私は、これはあなたが期待するようにGridViewが機能することを可能にすると信じてやるの後ろにあなたのコードで

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 
<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 
    <ContentTemplate> 
    <asp:GridView ID="GridView1" runat="server"> 
     <%-- your fields, etc --%> 
    </asp:GridView> 
    </ContentTemplate> 
</asp:UpdatePanel> 

私はこのケースでは信じられない余分なDataBind()が必要です。

また、UpdatePanelをConditionalに設定し、Jeisonが提案したようにUpdatePanel1.Update()を起動することもできます。

あなたは私たちに何が起こったのか知らせて、それでも問題が解決しない場合は、一部がhttp://msdn.microsoft.com/en-us/library/bb386452.aspx

で詳細を追加して見つけることができます。

+0

時間を割いてくれてありがとう、残念ながら私はこれを動作させることができません(違いはないようです)。私は何か間違っているかどうかわからない、すべて私は、UpdatePanel_Load()イベントにDataBindステートメントを置くまで動作します。私はそこにGridViewの外からUpdatePanelをリフレッシュできるようにする必要があります... –

+0

私はドン追加のDataBindが必要だと思います。 AsyncPostBackを常に登録したいので、Page_Loadにアタッチすると、スクリプトマネージャはGridViewを処理する必要があります。 – Kirk

+0

更新を強制するためにUpdatePanel1.Update()を行うことができますが、DataBind()を実行しないと信じていることを忘れてしまいました – Kirk

0

あなたの挿入ボタンをクリックした後に毎回UpdatePanel負荷をGridViewコントロールのDataBind()を呼び出すように、削除がデータソースに到達する前に、それがデータをリロードようです。

EDIT

もしそうなら、あなたは__doPostBack(updatePanelId、 "真")にブールeventArgumentを追加することができます。これを使用すると、updatepanelのロードイベントに条件を追加できます。

if(this.updatepanel1.Page.Request.Params["__EVENTARGUMENT"] == "true"] 
    this.gridview.databind() 

これで問題が解決します。

+0

おっと、私たちは今すぐ近くになっています!これは本当に最初の削除機能が動作することを可能にし、データを更新するupdatepanel.loadイベント中にdatabind()を呼び出すことができるという点で優れています。しかし、一度データバインドと更新が行われると、削除機能が再び壊れます!何か案は? (databind()の後にKirkのソリューションを試しましたが、修正されませんでした) –

+0

バインドするデータソースのタイプをGridViewに投稿できますか? – Bharath

+0

これはsqldatasourceです。ストアドプロシージャはすべて「簡単」な方法で完了しました:) –

関連する問題