約 4,356,386 件
https://w.atwiki.jp/tech_memo/pages/29.html
行の追加 行の追加の可・不可の設定 選択した行の列情報を個別に取得 ソート DataGridViewをdataGridViewとして登録 行の追加 例として3列のDataGridViewに追加を行う // stringの並び順は書き込み順 dataGridView1.Rows.Add(new object[] { string1 , string2 , string3}); 行の追加の可・不可の設定 // これを選択した場合、UI上で書き込みが可能 dataGridView1.AllowUserToAddRows = true; // これを選択した場合、UI上で書き込みが不可能 dataGridView1.AllowUserToAddRows = false; 選択した行の列情報を個別に取得 今回は1行のみ選択の場合 複数行選択した場合にはSelectedRowsのインデックスを変化させる string column1 = dataGridView1.SelectedRows[0].Cells[0].Value; string column2 = dataGridView1.SelectedRows[0].Cells[1].Value; string column3 = dataGridView1.SelectedRows[0].Cells[2].Value; ソート ここでは1列目を使って降順にソートする方法を示す sort()は第一引数にソートを行う基準となるものの選択し、第二引数で昇順・降順の選択を行う dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Ascending); このページを編集 上へ
https://w.atwiki.jp/kimikage/pages/55.html
チェックボックス列に設定する。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class frmMain Form { /// summary /// コンストラクタ /// /summary public frmMain() { // コンポーネントの初期化 InitializeComponent(); Init(); } /// summary /// 初期化処理 /// /summary private void Init() { DataGridView grdMain = new DataGridView(); // グリッドを追加 this.Controls.Add(grdMain); InitGrd(grdMain); } /// summary /// グリッドの初期化処理 /// /summary /// param name="grd" /param private void InitGrd(DataGridView grd) { // グリッドの位置と大きさを設定 grd.SetBounds(0, 0, this.Width, this.Height); // 行の追加不可 grd.AllowUserToAddRows = false; // 行ヘッダ非表示 grd.RowHeadersVisible = false; // チェックボックス列を追加 grd.Columns.Add(new DataGridViewCheckBoxColumn()); grd.Rows.Add(); } } } チェックボックス列がクリックされたらメッセージを出力 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class frmMain Form { /// summary /// コンストラクタ /// /summary public frmMain() { // コンポーネントの初期化 InitializeComponent(); Init(); } /// summary /// 初期化処理 /// /summary private void Init() { DataGridView dgvMain = new DataGridView(); // グリッドを追加 this.Controls.Add(dgvMain); InitGrd(dgvMain); } /// summary /// グリッドの初期化処理 /// /summary /// param name="dgv" /param private void InitGrd(DataGridView dgv) { // グリッドの位置と大きさを設定 dgv.SetBounds(0, 0, this.Width, this.Height); // 行の追加不可 dgv.AllowUserToAddRows = false; // 行ヘッダ非表示 dgv.RowHeadersVisible = false; // チェックボックス列を追加 DataGridViewCheckBoxColumn col = new DataGridViewCheckBoxColumn(); dgv.Columns.Add(col); dgv.Rows.Add(); dgv.Rows.Add(); dgv.CellContentClick += dgvMain_CellContentClick; } private void dgvMain_CellContentClick(object sender, DataGridViewCellEventArgs e) { DataGridView dgv = (DataGridView)sender; //DataGridViewCheckBoxColumnならば、チェックボックス列がクリックされた if (dgv.Columns[e.ColumnIndex] is DataGridViewCheckBoxColumn) { MessageBox.Show(string.Format("{0}行のチェックボックスがクリックされました。", e.RowIndex.ToString())); } } } } コンボボックス列を追加する using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class frmMain Form { /// summary /// コンストラクタ /// /summary public frmMain() { // コンポーネントの初期化 InitializeComponent(); Init(); } /// summary /// 初期化処理 /// /summary private void Init() { DataGridView grdMain = new DataGridView(); // グリッドを追加 this.Controls.Add(grdMain); InitGrd(grdMain); } /// summary /// グリッドの初期化処理 /// /summary /// param name="grd" /param private void InitGrd(DataGridView grd) { // グリッドの位置と大きさを設定 grd.SetBounds(0, 0, this.Width, this.Height); // 行の追加不可 grd.AllowUserToAddRows = false; // 行ヘッダ非表示 grd.RowHeadersVisible = false; // コンボボックス列を追加 grd.Columns.Add(new DataGridViewComboBoxColumn()); // コンボボックスの初期化 InitCmb((DataGridViewComboBoxColumn)grd.Columns[0]); grd.Rows.Add(); // コンボの初期値 grd.Rows[0].Cells[0].Value = "02"; } /// summary /// コンボボックスのリスト項目を設定 /// /summary /// param name="col" /param private void InitCmb(DataGridViewComboBoxColumn col) { DataTable dt = new DataTable(); DataRow row; string strValMember = "val"; string strDisMember = "dis"; dt.Columns.Add(strValMember); dt.Columns.Add(strDisMember); row = dt.NewRow(); row[strValMember] = "01"; row[strDisMember] = "項目①"; dt.Rows.Add(row); row = dt.NewRow(); row[strValMember] = "02"; row[strDisMember] = "項目②"; dt.Rows.Add(row); col.DataSource = dt; col.ValueMember = strValMember; col.DisplayMember = strDisMember; } } } コンボボックス列の値を変更した場合に、メッセージを出力する。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class frmMain Form { private DataGridView dgvMain = new DataGridView(); private DataGridViewComboBoxEditingControl dgvCmb; /// summary /// コンストラクタ /// /summary public frmMain() { // コンポーネントの初期化 InitializeComponent(); Init(); } /// summary /// 初期化処理 /// /summary private void Init() { // グリッドを追加 this.Controls.Add(dgvMain); this.Initdgv(); } /// summary /// グリッドの初期化処理 /// /summary private void Initdgv() { DataGridViewComboBoxColumn colCmb = new DataGridViewComboBoxColumn(); // グリッドの位置と大きさを設定 this.dgvMain.SetBounds(0, 0, this.Width, this.Height); // 行の追加不可 this.dgvMain.AllowUserToAddRows = false; // 行ヘッダ非表示 this.dgvMain.RowHeadersVisible = false; // コンボボックスの初期化 this.InitColCmb(colCmb); // コンボボックス列を追加 this.dgvMain.Columns.Add(colCmb); // 行追加 this.dgvMain.Rows.Add(); this.dgvMain.Rows.Add(); // イベントハンドラの追加 this.dgvMain.EditingControlShowing += dgvMain_EditingControlShowing; this.dgvMain.CellEndEdit += dgvMain_CellEndEdit; } /// summary /// セルを編集するためのコントロールが表示されたときの処理 /// /summary /// param name="sender" /param /// param name="e" /param private void dgvMain_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { // DataGridViewのコンボボックス編集コントロールが表示されたか if (e.Control is DataGridViewComboBoxEditingControl) { // イベントハンドラの開放用にDataGridViewComboBoxEditingControlを保持 this.dgvCmb = (DataGridViewComboBoxEditingControl)e.Control; // SelectedIndexChangedイベントハンドラを追加 this.dgvCmb.SelectedIndexChanged += dgvCmb_SelectedIndexChanged; } } /// summary /// セルの編集完了 /// /summary /// param name="sender" /param /// param name="e" /param private void dgvMain_CellEndEdit(object sender, DataGridViewCellEventArgs e) { if (sender is DataGridView) { // SelectedIndexChangedイベントハンドラを開放 this.dgvCmb.SelectedIndexChanged -= dgvCmb_SelectedIndexChanged; } } /// summary /// コンボの選択値変更時の処理 /// /summary /// param name="sender" /param /// param name="e" /param private void dgvCmb_SelectedIndexChanged(object sender, EventArgs e) { if (sender is DataGridViewComboBoxEditingControl) { DataGridViewComboBoxEditingControl cmb = (DataGridViewComboBoxEditingControl)sender; MessageBox.Show(string.Format("{0} が選択されました。", cmb.Text)); } } /// summary /// コンボボックスのリスト項目を設定 /// /summary /// param name="col" /param private void InitColCmb(DataGridViewComboBoxColumn col) { DataTable dt = new DataTable(); DataRow row; string strValMember = "val"; string strDisMember = "dis"; dt.Columns.Add(strValMember); dt.Columns.Add(strDisMember); row = dt.NewRow(); row[strValMember] = "01"; row[strDisMember] = "項目①"; dt.Rows.Add(row); row = dt.NewRow(); row[strValMember] = "02"; row[strDisMember] = "項目②"; dt.Rows.Add(row); col.DataSource = dt; col.ValueMember = strValMember; col.DisplayMember = strDisMember; } } }
https://w.atwiki.jp/restinpiece/pages/24.html
GRIDVIEWで隠し列作成 GridViewを読み込むイベントハンドラで列のオブジェクトひっつかまえて表示を消す セルの中にコントロールを配置し、コントロールのvisibleプロパティをfalseにして表示だけ消そうとすると コントロールにアクセスできなく(どうにかしてアクセスできるか未検証)なったので調査したらセルの表示を消すと GridViewで隠し列が実現できます。 GRIDVIEWで隠し列作成 概要 ページの説明 Protected Sub GridView1_RowCreated( _ ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs _ ) Handles GridView1.RowCreated If e.Row.RowType = DataControlRowType.DataRow _ OrElse e.Row.RowType = DataControlRowType.Header Then e.Row.Cells(2).Visible = False e.Row.Cells(3).Visible = False End If End Sub
https://w.atwiki.jp/lmes2/pages/66.html
GridViewを配置する 概要 GridViewを配置する。 手順こそ違うが、レコードを表示する とやっていることは同じ。 参考: .NET Framework クラス ライブラリ GridView クラス 前提条件 新しいwebサイトの作成 データベースへの接続の追加 新しいテーブルの追加 テーブルにデータを追加 SqlDataSourceの配置 手順 [ツールボックス] - デザインビューにドラッグアンドドロップ not found (142.jpg) 「データソースの選択」 - 「SqlDataSource1」を選択。 not found (143.jpg) 完了。 not found (144.jpg) 実行すると以下のようになる。 not found (145.jpg)
https://w.atwiki.jp/zephyr71/pages/30.html
DataGridView 一覧作成の性能実験 LINQの使用
https://w.atwiki.jp/mysqlmemo/pages/24.html
原則 ユーザーによる列の追加、削除を許可するDataGridViewの機能はOffとし、列の追加、列の削除ボタンを作って対応する(列追加許可をOnにすると動作がよくわからない。またOffにするとRowHeaderを表示する必要がなくなり、すっきりする?) DataTableにバインドされているとき バインド元のDataTableでRows.Addを行うときに、もしCurrentCellが新規行のとき、動作が何か変。新規行上で動作がへんになるので、いっそユーザーによる追加を許可しない様にすればいいのか。 DataTableにバインドするときは、なぜかDataGridViewRow.DataBoundItemが(一見DataRowになりそうだが)DataRowViewになる これは、DataTableがIListSourceを実装しており、GetListメソッドで返す値がDataRowViewだからかもしれない (制約を外して)エラーメッセージを出す方法 以下がサンプルコード。 これでてっとり早く、制約を外して、かつエラーメッセージを出すことができる。(もしかしたら動作が遅いかもしれない) サーバーに書きこむ前には、DataSet.EnForceConstraints = Trueとする(ここで、制約違反が残っている場合、例外が発生してConstraintが有効にならない)。 Private Sub DataGridView1_CellValidated(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellValidated Dim currentSourceRowView As DataRowView = CType(DataGridView1.Rows(e.RowIndex).DataBoundItem, DataRowView) If Not currentSourceRowView Is Nothing Then currentSourceRowView.EndEdit() End If Try Me.ClearErrors() DataSet1.EnforceConstraints = True Catch ex As ConstraintException 制約違反については、無視する End Try DataSet1.EnforceConstraints = False 現在の行以外でのエラーアイコンを描写させるために必要 DataGridView1.Refresh() End Sub Private Sub ClearErrors() Dim errorRows = DataSet1.DataTable1.GetErrors() For Each row In errorRows row.RowError = Nothing Dim errorCells = row.GetColumnsInError() For Each cell In errorCells row.SetColumnError(cell.ColumnName, Nothing) Next Next End Sub Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load DataSet1.EnforceConstraints = False End Sub
https://w.atwiki.jp/memo77/pages/49.html
PageLastUpdate 2007-11-19/today - /yesterday - クリックすると見出し一覧を表示します DataGridViewEx comment DataGridViewEx DataGridViewの拡張クラス。まずは列の位置、幅、表示をユーザー設定として保存/読み出しするメソッドから。 読み出しを自動化したかったんですが、Newを拡張するとデザイナからの設定のほうが後なのでうまくいきません。 保存を自動化したかったんですが、DisposeだとすでにDataColumnが破棄されていてNothingを喰らいます(苦)。 LoadColumnStateはForm_Loadで、SaveColumnStateはForm_Closingで呼ぶのがよいでしょう。 誰かよいタイミングを知っていたら教えてください。 今後の予定 列の表示状態を制御できるなんらかのインターフェースの供給 CSVやTAB出力機能の供給 各機能のコンテキストメニューへの供給 など。なんかネタを振ってくれる人がいれば拡張するかもしれません。 Option Strict On Imports System.IO Public Class DataGridViewEx Inherits DataGridView Public Sub SaveColumnState() Try If Directory.Exists(Application.UserAppDataPath) = False Then Directory.CreateDirectory(Application.UserAppDataPath) End If Dim savepath As String = Path.Combine( _ Application.UserAppDataPath, _ "DataGridEx.ColumnState." Me.Name) Dim dt As New DataTable(Me.Name) dt.Columns.Add("Name", Type.GetType("System.String")) dt.Columns.Add("Width", Type.GetType("System.Int32")) dt.Columns.Add("DisplayIndex", Type.GetType("System.Int32")) dt.Columns.Add("Visible", Type.GetType("System.Boolean")) For Each Column As DataGridViewColumn In Me.Columns Dim row As DataRow = dt.NewRow row("Name") = Column.Name row("Width") = Column.Width row("DisplayIndex") = Column.DisplayIndex row("Visible") = Column.Visible dt.Rows.Add(row) Next dt.WriteXml(savepath) Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Public Sub LoadColumnState() Try Dim loadpath As String = Path.Combine( _ Application.UserAppDataPath, _ "DataGridEx.ColumnState." Me.Name) If File.Exists(loadpath) = False Then Exit Sub Dim dt As New DataTable(Me.Name) dt.Columns.Add("Name", Type.GetType("System.String")) dt.Columns.Add("Width", Type.GetType("System.Int32")) dt.Columns.Add("DisplayIndex", Type.GetType("System.Int32")) dt.Columns.Add("Visible", Type.GetType("System.Boolean")) dt.ReadXml(loadpath) dt.DefaultView.Sort = "DisplayIndex" For Each drv As DataRowView In dt.DefaultView Dim column As DataGridViewColumn = Me.Columns(drv.Row("Name").ToString) column.DisplayIndex = CType(drv.Row("DisplayIndex"), Int32) column.Width = CType(drv.Row("Width"), Int32) column.Visible = CType(drv.Row("Visible"), Boolean) Next Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub End Class comment このページの記述で聞きたいこととか間違ってることとかありましたらコメントを。 CSVやTAB出力機能の供給の予定は? -- (Tarou) 2008-01-11 11 54 43 こんにちは。手元にはあるんですがまだあげてませんね。来週にでも追加しときましょうか。 -- (memo77) 2008-01-11 12 29 51 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/agehappy/pages/11.html
Private Sub ShowGridWidth(ByVal dg As DataGridView) Dim sMsg As String = "" For Each col As DataGridViewColumn In dg.Columns If sMsg.Length 0 Then sMsg += "," End If sMsg += col.Width.ToString Next MessageBox.Show(sMsg) End Sub
https://w.atwiki.jp/kennkenn/
このたびNゲージのレイアウトが完成し100両を超える世界中の新幹線が入り 乱れて高架3階建ての複々々々線を走行しています。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (N052.jpg) 一年間、試行錯誤の結果、線路長を長くするため、レイアウトは長方形からコの字型 にしました。凹のような形状です。阪神大震災クラスの地震がきても基礎だけは破壊 されないように、1800x300 の事務机4つと600x300 の小さな机2つの合計6つを すき間ができないように配置して、水平方向には動かないよう固定し、スチールロッ カーの小型部品約300個を組み立てて三階建て高架の基礎としました。 かなりの重量に耐えるようにしたので高架の上を子供なら歩いてもビクともしませ ん。レイアウト一周は約15mでNゲージなら16両編成が走行しても何とかさまになる ギリギリの長さです。 そして道床には、木材・金属・樹脂・など各種の材料を使用して比較した結果、発泡 ボードがもっとも軽くて消音効果があり、コスト面でも有利だったのでこれを採用。 また、高架だと電気配線をうまく隠すことができるし、照明用のLEDや電球も目立 たないように取り付けできるので平屋一階建てよりは有利です。 高架三階建てだと二階部分は薄暗く、一階部分は相当暗くなってしまいます。しかし 逆に昼間でも暗いのが幸いして室内灯付きの列車はすごく目立ってきれいです。 夜間はもちろんライトアップ。光度調整によりラスベガス風のテカテカキラキラか ら、田舎道走行のSLに似合う薄明かりまで対応します。 このレイアウト、線路を敷いてしまうと移動は不可能になりますが、スチールロッカ ーの小型部品をチョイチョイと組み立てた20個のユニットを並べただけなので、線路 さえはずせば割と簡単に移動ができます。かなり融通のきくレイアウトです。 スチールロッカーの部品は、コーナンにもホームズにもいろいろな種類があって迷い ましたが、もっとも小さな部品を買ったので個数が多くなりましたが、大きめの部品 だともっと簡単に出来たかもしれません。金属の柱がむき出しで見栄えが悪いのです が腕のある方ならレンガ橋もどきに加工することも可能でしょう。 ただ欲張りすぎて200個もの照明をはじめ、いろいろな仕掛けを作りすぎて、電気配 線が相当複雑になってしまい、今となっては、レイアウトの形状変更には死ぬほどの 勇気が必要になってしまいました。 最初は部分的に4階建てや5階建ても作って試運転したのですが、列車って、真横か らか、やや上方から眺めるのがもっとも美しく、下から見上げるものではないという のがよく分かりました。 実質的な床面積はタタミ2畳分ですので、やり方次第ではもっとコンパクトにできる ことも可能です。 基礎というか基盤がしっかりしていなければいくらカッコイイ列車をカッコ良く走ら せようとしてもうまくいきません。基礎がしっかりとできていなければ、その上にい くら華やかなものを積み上げていっても、やがてはもろくも崩れ去ってしまうので す。 いろいろやっているうちに、カーテンレールの上に線路を敷くと実に静かに走行する のを発見しました。16両編成の新幹線をスケールスピード500キロで走行させるとも のすごくやかましいのですがなぜかカーテンレールの上を走行するときだけ走行音が 消えてしまうのです。これは新発見でした。次回制作するときは基盤に中が空洞にな ったものを採用します。消音効果抜群です。 #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (con1.jpg) #ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (con2.jpg) - - -
https://w.atwiki.jp/plalayout/pages/233.html
レイアウト講座初級編 プラレールレイアウトの考え方 基本的なつなげ方は実際にやった方がはやいが、分かりやすいページを2つだけ紹介しておこう。 プラレールレイアウト講座 http //www.takaratomy.co.jp/products/plarail/layout/index.htm プラレールレイアウトこうざ【第2部】 初級編:単線http //homepage3.nifty.com/pecker/plarail/chair02/index.html それだけでは少しさびしいので少し蛇足を書いておこう。 レールとポイントの設計思想 基本となるレールは直線レールと曲線レールである。曲線レール8つで構成される円の半径は、直線レール一本分と同じである。また、ターンアウトポイントレールは、直線レールと曲線レールを重ねた形と、8の字ポイントレールは、曲線レールを2つ重ねた形と同じである。そのおかげで、ポイントを含んだレイアウトや、曲線と直線を含んだレイアウトを簡単につなげることが可能となっている。(複線幅と、Y字ポイントはこのルールから逸脱した存在なので、大いに苦労させられる羽目になる。) 一辺が直線レール一本分の格子を書き入れてみると、レイアウトが格子に沿って形づくられていることがわかる。 曲線を2本一組で使う 格子に沿った形、つまり同じ方向に曲がる曲線レール2本を組にしてレイアウトを組んでいる限りつながらなくなることはほとんどない。図はのレイアウトは特に考えなしに組んだものだが、問題なくつながる。 ここで、曲線レールをS字に組んだものを入れると様子が変わる。計算上は√2と2-√2(約1.4と約0.6)ずれた格子に移る。その先は普通はつながらない。 点対称で考える つながるレイアウトはどのようにできるのか。一つの考え方は、点対称にパーツを入れていくことである。 最初に楕円のレイアウトがある。ここに、直線、曲線S字を適当に入れていっても、つながるレイアウトとなる。 幾何的におなじ長さを利用する 曲線のS字に直線の斜めを2本入れたものを含んだレイアウトである。この曲線、直線、直線、曲線の区間の横の長さは丁度直線2本分である。これを利用して反対側でつなげようとしても直線のみではつながらない。縦の長さが2√2だから直線3本は入らないし、2.75本分でも足りない。ここで、曲線S字を2組あわせて、同じ軸にもどるものを用意すれば、長さがちょうど2√2でレイアウトはきれいにつながる。点対称を利用しなくても、このようにつなげられる例は存在する。 幾何的に近似できる長さを利用する 直線3本を入れた図のようなレイアウトを組んでみる。最後にすこしだけ隙間が開く。ここに1/4レールを入れてみる。この場合は丁度はまる。これは、直線3本だった場合にたまたまはまっただけである。 試しに直線2本でレイアウトを組んで1/4レールで調整しようとしても、最後に隙間があいてしまう。 計算する場合には、1/4レールを調整できる最小単位として、縦横斜め、いろいろ当てはめて隙間を埋める検討をすることとなる。 周回を放棄する 一編成だけを走らせるのなら、なにもレイアウトは周回である必要もない。両側に折り返しを付ければ、列車は往復を繰り返す(むしろこちらの方が路線を両進行方向に見られて楽しいとも言える。)。そうすれば、途中の接続をいろいろ考えることを放棄しても全く問題はない(接続だけを考えれば)。