- - PR -
datagrid での更新処理で教えてください(ASP.NET)
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-02-02 19:14
すみません 過去ログを探してみたのですが
初歩的すぎるようです すみませんがご教授の程お願いします。 VS.NETを使用しております。 テンプレート編集にて、EditItemTamplate にてTEXTBOX を設定しました この値の取得方法が、解りません。 すみません 初歩すぎて 呆れられると思いますが、教えてください m(__)m とりあえず、本のサンプルからパクってきて、下記のようにソースを作成しましたが キャストエラーになります VB.NETです Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand DataGrid1.EditItemIndex = e.Item.ItemIndex DataGrid1.DataBind() End Sub Private Sub DataGrid1_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.UpdateCommand Dim txtsuitobi As TextBox = e.Item.Cells(6).Controls(0) ← ここでエラー Dim txtsuitocd As TextBox = e.Item.Cells(7).Controls(0) SqlDataAdapter1.UpdateCommand.Parameters.Add("@出納日", txtsuitobi) SqlDataAdapter1.UpdateCommand.Parameters.Add("@出納部門コード", txtsuitocd) SqlDataAdapter1.UpdateCommand.ExecuteNonQuery() DataGrid1.EditItemIndex = -1 DataGrid1.DataBind() End Sub ------------------------------------------------------ Dim txtsuitobi As TextBox = e.Item.Cells(6).Controls(0) 行で 「指定されたキャストは有効ではありません。」 と言われます データウォッチで e.Item.Cells(6).text="" です e.Item.Cells(6).Controls(0) の見方がよく解らないので不明・・・・ DataGrid1_EditCommand イベント後の、実現は 編集ボタンを押した行に、更新・キャンセル ボタンが表示され 各セルも、テンプレート編集にて、EDITITEMTENPLATE にて設定したTEXTBOXが表示され TEXTBOX内のデータも初期表示には、DBの内容が表示されます。 | ||||||||
|
投稿日時: 2004-02-03 10:37
Dim txtsuitobi As TextBox = e.Item.Cells(6).Controls(0)
Dim txtsuitocd As TextBox = e.Item.Cells(7).Controls(0) を Dim txtsuitobi As TextBox = CType(e.Item.Cells(6).Controls(0),TextBox) Dim txtsuitocd As TextBox = CType(e.Item.Cells(7).Controls(0),TextBox) で解決できませんか? | ||||||||
|
投稿日時: 2004-02-03 10:55
レスをありがとうございます。 Dim txtsuitobi As TextBox = CType(e.Item.Cells(6).Controls(0),TextBox) これも試したのですが、 「キャストは無効です」と言われます | ||||||||
|
投稿日時: 2004-02-03 11:00
引用:
-------------------------------------------------------------------------------- 無月 重造さんの書き込み (2004-02-03 10:37) より: Dim txtsuitobi As TextBox = CType(e.Item.Cells(6).Controls(0),TextBox) Dim txtsuitocd As TextBox = CType(e.Item.Cells(7).Controls(0),TextBox) で解決できませんか? -------------------------------------------------------------------------------- Dim txtsuitocd As String = CType(e.Item.Cells(7).Controls(0),TextBox).Text Dim txtsuitocd As string = CType(e.Item.Cells(7).Controls(0),TextBox).Text でテキストボックスの入力内容を取得できます。 これで、解決できませんか? | ||||||||
|
投稿日時: 2004-02-03 11:08
クイックウォッチに「e.Item.Cells(6).Controls」だけ打ち込むと、ControlCollectionに入っている個数が、Countプロパティに出てくると思います。それがいくつになっていますか? クイックウォッチに「e.Item.Cells(6).Controls(n)」と入れると、データタイプが最上行付近にあると思います。または、「e.Item.Cells(6).Controls(n).GetType().ToString()」と入れてください。それでクラスがわかります。 ※nは、0からCountプロパティ-1まで おそらく、複数のコントロールがあって、0番目がTextBoxではない、ということだと思います。目的のコントロールを探す、という手順をコーディングすればいいのですが、ちょっと手間ですね。 | ||||||||
|
投稿日時: 2004-02-03 11:26
直接の回答ではありませんが、
ページトレースを有効にすれば、何かが見えるかもしれません。 「e.Item.Cells(6).Controls(0)」が何を参照しているかを考えてみてください。 参考:.NET Framework 開発者ガイド > ページのトレースの有効化 | ||||||||
|
投稿日時: 2004-02-03 12:02
無月さん、びおさん、Jittaさん ありがとうございました m(__)m
control.count=3でした control(1) にtextboxがありました ありがとうございました。 Dim txtsuitobi As TextBox = CType(e.Item.Cells(6).Controls(1), TextBox) として、うまくいきました ありがとうございます m(__)m ちなみに、 control(0),control(2)の「GetType().ToString()」を表示すると control(0),control(2)共に、System.Web.UILiteralControl とありますが control(0)はItemTemplateのLABELを指していると思っていいのでしょうか? control(2)はFOOTER??? デザイナが作成したHTMLが、下記のようになっています。 <asp:datagrid id=DataGrid1 style="Z-INDEX: 101; LEFT: 32px; POSITION: absolute; TOP: 72px" runat="server" ShowFooter="True" DataSource="<%# 入金H1 %>" DataKeyField="出納日" AllowSorting="True" DataMember="入金伝票_H" AllowPaging="True" BorderColor="#999999" BorderStyle="None" BorderWidth="1px" BackColor="White" CellPadding="3" AutoGenerateColumns="False"> | 略 | <Columns> <asp:TemplateColumn HeaderText="出納日"> <ItemTemplate> <asp:Label id=Label3 runat="server" Text='<%# EvalContainer, "DataItem.出納日") %>'> </asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox id=suitobi runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.出納日") %>'> </asp:TextBox> </EditItemTemplate> </asp:TemplateColumn> | 略 | </Columns> <PagerStyle HorizontalAlign="Center" ForeColor="Black" BackColor="#999999" Mode="NumericPages"></PagerStyle> </asp:datagrid></FONT></form> まだまだ、解らない事が多すぎて、ままなりません 今後とも、よろしくお願い致します | ||||||||
|
投稿日時: 2004-02-03 12:11
多分、Indexを決めうちにしてしまうよりも・・・
のように、Functionを実装しておいたほうが安全かもしれません。 #修正:引数の部分を開業もとい改行 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-02-03 18:32 ] |