- - PR -
DataGridにあるHyperLinkの内容を取得して、DBから削除したい
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-02-16 15:45
ASP.NETで開発中の@beginnerです。よろしくお願いします。
現在、DataGridに配置した削除ボタンより同行にある HyperLinkの内容を取得した後に、 それに紐づくデータをDBから削除しようと試みています。 DataRowViewやDataGridItem,TableCell,e.Item.Cell(i)等々 試したのですがうまくいきません。 以下にサンプルを記しますのでご教授いただけないでしょうか。 よろしくお願いします。 ・Windows XP ・Visual Studio .NET 2003 ・.NET Framework v1.1 **********ここからItemDataBound********** Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound If Not e.Item.DataItem Is Nothing Then Dim datarowview As DataRowView = CType(e.Item.DataItem, DataRowView) '以下の "person" は <asp:HyperLink id="person" runat="server"> のidです。 Dim hyperlink As HyperLink = CType(e.Item.FindControl("person"), HyperLink) '以下の "ANIMAL" は <asp:TemplateColumn HeaderText="ANIMAL"> のHeaderTextです。 hyperlink.Text = row("ANIMAL") If row("ID") = 0 Then hyperlink.NavigateUrl = "./previous.aspx?id=" & row("ID") & " & name=" & row("NAME") Else hyperlink.NavigateUrl = "./next.aspx?id=" & row("ID") & "& name=" & row("NAME") End If End If End Sub **********ここまで********** **********ここからDeleteCommand********** Private Sub DataGrid1_DeleteCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.DeleteCommand 'この部分にDataGridの削除ボタンがクリックされた行のIDを取得して、 'IDに紐づくデータをDBから削除するコードを書きたい。 'DBから削除された後に次ページへ遷移 Response.Redirect("./check.aspx") End Sub **********ここまで********** |
|
投稿日時: 2007-02-16 22:37
ID を Delete を実行するボタンの CommandArgument に渡しておいたらどうですか?
そうすれば DeleteCommand 時に、DataGridCommandEventArgs::CommandArgument から ID が取得できると思います。 ID が取れたらいいんですよね? HyperLink から取得しなければならないなんてことは別にないですよね? [ メッセージ編集済み 編集者: THREE-ONE 編集日時 2007-02-16 22:38 ] |
|
投稿日時: 2007-02-19 08:48
ご返事が遅くなりました。
レスありがとうございます。 早速、CommandArgumentで試してみます。 >ID が取れたらいいんですよね? はい。IDが取得できればと。 ただ、HyperLinkに紐づくIDでなければならないので、 その辺をどのようにすればよいのかまだ理解できていません。 |
|
投稿日時: 2007-02-19 10:50
CommandArgumentを使おうと試みたのですが、
DeleteボタンをDataGrid内に配置しているため、 ButtonColumnクラスにはCommandArgumentについて 言及されておらず、 ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1041/cpref/html/frlrfSystemWebUIWebControlsButtonColumnClassTopic.htm 実際に.aspxにCommandArgumentを記述すると 「要素'ButtonColumn'属性の'CommandArgument'みつかりませんでした。」 となってしまいます。 ButtonクラスではCommandArgumentがあるのですが・・・ ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1041/cpref/html/frlrfsystemwebuiwebcontrolsbuttonclasstopic.htm 私の調べ方が未熟で、不十分なのかもしれないですが、 皆様再度ヒントをいただけないでしょうか。 よろしくお願いします。 |
|
投稿日時: 2007-02-19 16:56
ちょっとv1.1で試せないんですが、テンプレート列にすることで対応できませんか?
ボタンのCommandNameを"Delete"にすれば削除ボタンとして機能したと思います。 |
|
投稿日時: 2007-02-19 17:39
私はDataGridを使用する際、いつも先頭の列を非表示のBoundColumnにしてIDをバインドすることにしています。
んで、行が選択されたときはItemCommandイベントなどにおいて e.Item.Cells[0].TextでバインドしたデータのIDを取得してますよ。 |
|
投稿日時: 2007-02-19 22:49
それでは、DataKeyField プロパティにデータソースの ID 列を指定してみてはいかがですか?
DataGrid::DataKeys[e.Item.ItemIndex] で取得できるはずです。 [ メッセージ編集済み 編集者: THREE-ONE 編集日時 2007-02-19 22:50 ] |
|
投稿日時: 2007-02-20 09:55
ご返事が遅くなりましたが、
皆様レスありがとうございます。 >べる様 ありがとうございます。 以下のようにTemplateColumnにすることができました。 ただ、ButtonColumnとの違いがあまり理解できていません。 <asp:TemplateColumn HeaderText="DELETE"> <ItemTemplate> <asp:Button id="delbottun" runat="server" Text="削除" CommandName="Delete" > </asp:Button> </ItemTemplate> </asp:TemplateColumn> >しょくぱん様 ありがとうございます。 なるほど。非表示のBoundColumn試してみますね。 >THREE-ONE様 レスありがとうございます。 DataKeyFieldプロパティ! 初めて知り、早速ヘルプで調べてみました。 Dim row As DataRow = dt.Rows.Find(ItemsGrid.DataKeys(e.Item.ItemIndex)) でできそうな気がしてきました。 時間はかかりますが、 皆様のヒントをもとに頑張ってみて 報告させていただきます。 VBで作っており、C#からのコードの変換?も まだまだですが、ありがとうございます。 またご指導いただくかもしれませんが よろしくお願いします。 |