2011-06-22 8 views
2

私は、現在の情報を編集するだけでなく、新しいものを追加できるようにしたデータグリッドを作成したかったのです。私はそれに応答できるチェックボックスを持っている必要があります。基本的には名前であり、isActiveフィールドはDataGridの各行のチェックボックスで表されます。更新機能を持つDataGridにLinqを追加

linqを使用したいと思いますが、可能かどうかはわかりません。これはASP.NetのWebサイトです。

誰かがすばらしいと思われるフィードバックがあった場合。

答えて

0

簡単に行うことができます。

GridViewには、特定の操作(削除、編集、キャンセル、および更新)に使用できる多数のイベントがあります。例えば、OnRowUpdatingとOnRowEditingは、このように次のようになります。

<asp:GridView ID="gvTest" runat="Server" OnRowUpdating="gvTest_RowUpdating" OnRowEditing="gvTest_RowEditing"> 
    <Columns> 
    <asp:TemplateField> 
     <ItemTemplate> 
     <asp:Button ID="btnUpdate" runat="Server" Text="Update" CommandName="Update"> 
     <asp:Button ID="btnEdit" runat="Server" Text="Edit" CommandName="Edit"> 
     </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

は、その後、あなたの分離コードに更新(編集、削除など)のイベントハンドラを実装します。人生をより楽にするには、デザインビューに切り替え、GridViewを見つけてイベント(稲妻のように見えるアイコン)を表示させてから、イベントをダブルクリックすると、そのイベントのスタブが自動的に作成されますコードビハインドでは、htmlマークアップも自動的に作成されます。あなたはまた、代わりに更新(編集、削除、など)イベントを使用してのOnRowCommandを使用することができることを

protected void gvTest_RowUpdating(object sender, GridViewUpdateEventArgs e) { 
    // Convenient access to the row index that was selected 
    int theRowIndex = e.RowIndex; 
    GridViewRow gvr = gvTest.Rows[e.RowIndex]; 

    // Now its just a matter of tracking down your various controls in the row and doing 
    // whatever you need to with them 
    TextBox someTxtBox = (TextBox)gvr.FindControl("theTextBoxID"); 
    DropDownList someDDL = (DropDownList)gvr.FindControl("theDDL_ID"); 

    // Perhaps some business class that you have setup to take the value of the textbox 
    // and insert it into a table 
    MyDoSomethingClass foo = new MyDoSomethingClass { 
    FirstName = someTxtBox.Text, 
    Age = someDDL.SelectedItem.Value 
    }; 

    foo.InsertPerson(); 
} 

注意、しかしOnRowCommandは、選択されていない:RowUpdatingイベントハンドラの例は、このようにようになります。行インデックスはすぐに利用できます。あなたがそれを望むなら、あなたはあなたのマークアップで少しの魔法をしなければなりません。

protected void gvTest_RowCommand(object sender, GridViewCommandEventArgs e) { 
    int rowIdx = Convert.ToInt32(e.CommandArgument); 
} 

EDIT:

キー(複数可)へのアクセスあなたのGridViewであることを

<asp:Button ID="btnDoSomething" runat="Server" Text="Do Something" CommandArgument="<%# Container.DataItemIndex %>" CommandName="DoSomething"> 

そしてあなたが行インデックスで取得するには、このような何かをRowCommandイベントで

縛られているのは、実際にはとても単純です。 (私たちはRowCommandイベントにいると仮定)あなたのGridViewのは、1つのキーだけにバインドされていると仮定すると、あなたはこのようにキーを取得することができます:

int rowIdx = Convert.ToInt32(e.CommandArgument); 
int someKeyID = Convert.ToInt32(gvTest.DataKeys[rowIdx].Value); 
+0

私はGridViewUpdateEventArgsがrowIndexにの定義が含まれていません」取得しています' –

+0

これに応答する時間をとっていただきありがとうございます。私はコントロールを見つけることができると言う、私はテンプレートを介してコントロールを追加するだけですか?私は名前とisActiveフィールドを表示する必要があり、それはかなりです。私はそれらのものを編集し、削除することができるようにします。 –

+0

@Blake - RowIndexプロパティが利用できない理由はわかりません。 GridViewはASP.NET 2.0がリリースされて以来、EventArgsの所有物でした。あなたはどのフレームワークですか? – Jagd

関連する問題