- PR -

DataGridコントロールの編集用テキストボックスサイズ設定

1
投稿者投稿内容
daiatom
会議室デビュー日: 2005/06/03
投稿数: 2
投稿日時: 2005-06-03 17:46
OS Windows2000
ASP.net
VB.netで開発を行っています。

以前のスレッドで件名の内容の解決策が記述されているところがあったのですが
実際自分の環境ではエラーになってしまいます。
どなたかご存知の方がいれば御教授願いします。

Imports System.Web.UI.WebControls

Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand

DataGrid1.EditItemIndex = e.Item.ItemIndex
ScrDataSet()
DataGrid1.DataBind()

Dim line As DataGridItem = DataGrid1.Items(e.Item.ItemIndex)
Dim tb1 As TextBox = CType(line.Cells(0).Controls(0), TextBox)
tb1.Width = Unit.Percentage(100)
End Sub

エラーメッセージ
指定されたキャストは有効ではありません。
行 193:
行 194: Dim line As DataGridItem = DataGrid1.Items(e.Item.ItemIndex)
行 195: Dim tb1 As TextBox = CType(line.Cells(0).Controls(0), TextBox)
        ↑ここでエラーになっている
行 196: tb1.Width = Unit.Percentage(100)
かりろ
会議室デビュー日: 2005/06/13
投稿数: 2
投稿日時: 2005-06-13 10:40
Controls(0)が本当にTextBoxなのか疑問です。
Controls(1)かもしれません。
Controls(2)かもしれません。
Controls(3)かもしれません。

Cells(0)にはControlsがいくつあるのでしょうか?
Controls.Countで調べてみては?
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-06-13 10:56
コントロールコレクションから指定したコントロールのみ取得する方法です。
http://blog.livedoor.jp/nal_6295/archives/286780.html
_________________
「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/
かりろ
会議室デビュー日: 2005/06/13
投稿数: 2
投稿日時: 2005-06-13 11:58
Cells(0)に複数のControlsがある可能性があるわけだから

Dim tb1 As TextBox = CType(line.Cells(0).FindControl("TextBox1"), TextBox)

と、IDで検索して確定させてからキャストするのがいいと思います。

daiatom
会議室デビュー日: 2005/06/03
投稿数: 2
投稿日時: 2005-06-15 16:37
かりろ様・NAL-6295様,
返事が遅くなり大変申し訳御座いません。
レスを立ててから他の作業をしながら、調べながらしていたら遅くなってしまいました。

皆様の指摘により解決いたしました。
Cells(0)の指定が間違っていました。自分の環境ではButtnになっていました。
かりろ様・NAL-6295様、的確なアドバイス本当にありがとう御座いました。

以下のソースで解決しました。
Private Sub DataGrid1_EditCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs) Handles DataGrid1.EditCommand

'============================================================
' 編集状態にする
'============================================================
DataGrid1.EditItemIndex = e.Item.ItemIndex
ScrDataSet()
DataGrid1.DataBind()

'============================================================
' 行の指定
'============================================================
Dim line As DataGridItem = DataGrid1.Items(e.Item.ItemIndex)

With line

'========================================================
' 列の指定
'========================================================
DirectCast(.Cells(2).Controls(0), TextBox).Width = Unit.Percentage(78) 'テキストボックス幅の指定

End With

End Sub
1

スキルアップ/キャリアアップ(JOB@IT)