- 題名: GridView内にラジオボタンを配置する方法
- 日時: 2008/04/16 19:58:39
- ID: 21876
- この記事の返信元:
- (なし)
- この記事への返信:
- [21887] Re[1]: GridView内にラジオボタンを配置する方法2008/04/19 17:53:42
- ツリーを表示
はじめまして、H.K.R.と申します。 私はASP.NETについてはほとんど無知なので、 もし変なことを書いていたら申し訳ないのですが、 ご紹介いただいたサイトを参考にして、以下のコードでとりあえず、 GridView内の複数行にまたがって配置された複数個のRadioButtonのうちのどれか1つしか チェック状態にすることができないようにする ことができましたので、 試してみてはいかがでしょうか? [追記]当該サイトに全ソースコードが掲載されていることに気づきませんでした・・・(汗 [/追記] ※ 私が試した環境:WindowsXPHomeSP2、InternetExplorer7、ASP.NET開発サーバー、 VisualWebDeveloper2008ExpressEdition(対象Frameworkは、.NET Framework 2.0) VisualBasic2008ExpressEdition(対象Frameworkは、.NET Framework 2.0) > 画面レイアウト時のツールボックスに表示する方法を教えてください。 VisualBasic2008ExpressEdition(対象Frameworkは.NET Framework 2.0)と、 VisualWebDeveloper2008ExpressEdition(対象Frameworkは.NET Framework 2.0)の場合は、 以下の手順で行うことができました。 1. VB2008ExpressEditionでクラスライブラリプロジェクトを作成し、 対象Frameworkを.NET Framework 2.0に変更。 カスタムコントロールのソースコードを入力し、 ソリューションエクスプローラのプロジェクト名を右クリック→「ビルド」を選択して、ビルドを行う。 2. VisualWebDeveloper2008ExpressEditionを起動し、 ツールボックスを右クリック→「アイテムの選択」、「.NET Framework コンポーネント」タブを選択して 「参照」ボタンをクリック→手順1.でビルドした.dllファイルを選択→「OK」ボタンをクリック。 3. デザイナ上でツールボックスから当該カスタムコントロールをDragAndDropすると、 現在開いているWebサイトのBinフォルダに、1.で作成した.dllファイル等の参照が追加される。 ※ VisualStudioの上位Editionの場合は、手元の文献(*)によると、手順がもっと簡単で、 「ファイル」メニューの「プロジェクトの追加」をクリック、 「テンプレート」ボックスから「Webカスタムコントロール」を選択し、 カスタムコントロールのソースコードを入力してビルドした後、 上記2.の手順でツールボックスに追加すればよいようです。 (*)日経BPソフトプレス発行「プログラミングVisualBasic.NET Vol.2活用編」、pp. 818 - 820. (以下コード) ' VisualWebDeveloper2008ExpressEdition(対象Frameworkは.NET Framework 2.0)のコード ' Imports System.Data Partial Class _Default Inherits System.Web.UI.Page ' GridView2がデザイナで配置されており、 ' その第1列目がTemplate列であり、 ' かつそのTemplate列の中にGridViewRadioButtonItemが配置されており、 ' かつそのGridViewRadioButtonItemのGroupNameプロパティに何らかの値(文字列)が設定されていることを前提とする Protected Overrides Sub OnLoad(ByVal e As System.EventArgs) testF() MyBase.OnLoad(e) End Sub Private Sub testF() If Me.IsPostBack = False Then Me.GridView2.DataSource = Me.CreateDataSource2() Me.GridView2.DataBind() Else For i As Integer = 0 To Me.GridView2.Rows.Count - 1 Dim tr As TableRow = Me.GridView2.Rows(i) Dim tc As TableCell = tr.Cells(0) For Each c As Control In tc.Controls If TypeOf c Is RadioButton Then Dim rb As RadioButton = DirectCast(c, RadioButton) If rb.Checked = True Then ' ↓ブラウザの背後にMsgBoxが表示される場合があります。 ' ↓(その場合、ブラウザの動作が「固まった」ように見えます。念のため) MsgBox(tr.Cells(1).Text + " をチェックしました。") End If End If Next Next End If End Sub Private Function CreateDataSource2() As ICollection Dim dt As New DataTable dt.Columns.Add(New DataColumn("Field1", GetType(String))) dt.Columns.Add(New DataColumn("Field2", GetType(String))) dt.Columns.Add(New DataColumn("Field3", GetType(String))) dt.Columns.Add(New DataColumn("Field4", GetType(String))) For i As Integer = 1 To 7 Dim dr As DataRow = dt.NewRow For j As Integer = 1 To dt.Columns.Count dr.Item(j - 1) = String.Format("{0}行目のデータ{1}", i, j) Next dt.Rows.Add(dr) Next Dim dv As New DataView(dt) Return dv End Function End Class ' VisualBasic2008ExpressEdition(対象Frameworkは.NET Framework 2.0)のコード ' (参考文献:http://codezine.jp/a/article/aid/840.aspx?p=1) ' Imports System.ComponentModel Imports System.ComponentModel.Design Imports System.Drawing.Design Imports Microsoft.VisualBasic Imports System.Web Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.IO Public Class GridViewRadioButtonItem Inherits RadioButton Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) ' このプロシージャ内のコードにはあまり自信なし(これでとりあえず意図通りに動作していますが・・・) Dim tw As New HtmlTextWriterEx(writer, Me) MyBase.Render(tw) End Sub Protected Overrides Function LoadPostData(ByVal postDataKey As String, ByVal postCollection As System.Collections.Specialized.NameValueCollection) As Boolean Dim b As Boolean = (postCollection(Me.GroupName) = Me.UniqueID) If Me.Checked <> b Then Me.Checked = b Return b Else Return False End If End Function Private Class HtmlTextWriterEx Inherits HtmlTextWriter Public Sub New(ByVal tw As TextWriter, ByVal parent As RadioButton) MyBase.New(tw) Me.m_parent = parent End Sub Private m_parent As RadioButton Public Overrides Sub AddAttribute(ByVal key As System.Web.UI.HtmlTextWriterAttribute, ByVal value As String) Select Case key Case HtmlTextWriterAttribute.Name MyBase.AddAttribute(key, m_parent.GroupName) Case HtmlTextWriterAttribute.Value MyBase.AddAttribute(key, m_parent.UniqueID) Case Else MyBase.AddAttribute(key, value) End Select End Sub End Class End Class 以上です。
分類:[ASP.NET]
いつもお世話になっております。
VB.NETでWebフォームを作成しております。
GridVIew内でラジオボタンを配置しようと考えていたのですが、
グループネームが統一されず困っております。
検索したところ、CodeZineで紹介されておりました
http://codezine.jp/a/article/aid/840.aspx
をVBに変換して使おうと考えております。
そこで質問なのですが、画面レイアウト時のツールボックスに表示する方法を教えてください。
よろしくお願いします。