2010-11-30 8 views
2

編集モードにGridViewのの複数の行を入れてください。行データには編集可能な列が1つあります。ユーザーは、タブを押して次の行に移動して前記列を編集できるはずです。は、私は、ユーザーがGridViewの上で編集を行う「をタブ」できるようにする必要が

私はこのタスクを達成するための任意の簡単な方法を発見していません。プログラムでグリッドビューを編集モードにする方法を見つけましたが、下のコードをテストすると、一度に1行しか動作しません。

 reviewTransferGV.EditIndex = 0; 
     reviewTransferGV.Rows[0].RowState = DataControlRowState.Edit; 
     reviewTransferGV.EditIndex = 1; 
     reviewTransferGV.Rows[1].RowState = DataControlRowState.Edit; 
     reviewTransferGV.DataBind(); 

答えて

8

私は、ページ内のプロパティを作成することで、回避策をした:

protected bool IsEditMode 
{ 
    get { return this.EditMode; } 
    set { this.EditMode = value; } 
} 

は、その後のGridViewに私が項目テンプレート内の表示と編集モードのコントロールを持っています。これは全体のGridViewの編集のために働く

<asp:TemplateField SortExpression="Status" HeaderText="Status"> 
<ItemTemplate> 
    <asp:Label Id="lblStatus" Text='<%# Eval("Status") %>' Visible='<%# !IsEditMode %>' runat="server" /> 
    <asp:TextBox ID="txtStatus" Text='<%# Eval("Status") %>' Visible='<%# IsEditMode %>' runat="server" /> 
</ItemTemplate> 

:プロパティ値に基づいて可視性を設定します。おそらく、個々の行に対して機能させるために、いくつかの変更を加える必要があります。

+0

魅力のように動作します。興味深いことに、この小さなトリックを使用して、表示したくない列データを取得することもできます。例えば。あなたが可視に設定した場合=あなたが分離コード内のテキスト値を取得することはできませんが、あなたはtemplatefieldを使用して、偽=目に見えるTemplateFieldを設定した場合、あなたはまだ「lblStatus」テキスト値とlblStatusに取得することができboundfieldにFalseが表示されません。 –

0

GridViewで複数の行を同時に編集モードにすることはできません。複数の行を編集する場合は、独自のメカニズムをロールバックする必要があります。

+0

私はちょっと、あなたがこれを行うにはGridViewのを拡張/私自身のコントロールの構築を開始する場所についてどのような提案をしていないことを考え出しましたか?私は答えがそこにあることを望んで、Wroxの本の基本的なコントロールの建物をスキミングしています。 –

0

もう一つのポイントは、結果をデータベースに保存する方法です。 定期的に使用している間は、作業を担当する更新コマンドを簡単に呼び出します.ItemTemplateには更新ボタンがあります。 私はGridViewの外にボタンを追加し、ハンドラーでは、私は手動でUpdateRowメソッドを呼び出します。

+0

更新された行はどのように分かりますか? – Chris

関連する問題