約 4,726,355 件
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/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/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/canjymax/pages/23.html
dataGridViewの内容をxmlに保存で保存したxmlファイルの内容をdataGridViewに表示します。 下準備として、フォーム上にdataGridView1とdataSet1とbutton1を貼り付けます。 dataSet1とdataGridView1のプロパティは dataGridViewの内容をxmlに保存 で設定した内容と同じにします。 button1のクリックイベントを private void button1_Click(object sender, EventArgs e) { dataSet1.ReadXml("test.xml"); } とすれば、ボタンクリックでXMLの内容がdataGridViewに反映されます。 また、列情報もXMLに保存されている場合、 private void button1_Click(object sender, EventArgs e) { dataSet1.Clear(); dataSet1.ReadXml("test.xml"); dataGridView1.DataSource = dataSet1; dataGridView1.DataMember = dataSet1.Tables[0].TableName; } とすれば、dataSetとdataGridViewのプロパティを変更しなくても、デザイナーに貼り付けるだけでOK!
https://w.atwiki.jp/canjymax/pages/22.html
dataGridViewで編集した内容をxmlに保存するには、 dataSetのWriteXmlメソッドを使います。 まず下準備として、dataGridViewとdataSetの関連付けをします。 フォーム上にdataGridView1とdataSet1とbutton1を貼り付けて dataSet1のTablesに、適当な名前のテーブルを追加し、 Culumnsに列コレクションを作成します。 dataGridView1のプロパティを DataSource dataset1 DataMember Table1 ←上で追加したテーブル名 button1のクリックイベントに private void button1_Click(object sender, EventArgs e) { dataSet1.WriteXml("test.xml"); } と記述すれば、dataGridViewで編集した内容がXMLファイルに保存されます。 dataSetの列情報なども一緒に保存する場合は private void button1_Click(object sender, EventArgs e) { dataSet1.WriteXml("test.xml", XmlWriteMode.WriteSchema); } とすれば、保存されます。
https://w.atwiki.jp/kimikage/pages/75.html
行のドラッグ&ドロップが可能なDataGridView。 ちょっとバグがあるけれど一応動作する。 DataSourceには対応できない。 ViewのCellに直接データを突っ込んで使用可能。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Drawing; namespace MyReName.ctrl { class DragAbleDataGridView DataGridView { private int mintCurrentRowIndex = -1; private int mintNextRowIndex = -1; private bool mboolMoveToEndRowFlg = false; private int[] dragRowIndex; private bool Flg = true; private Label lblBar = new Label(); public Color DropDawnBarColor { get { return lblBar.BackColor; } set { lblBar.BackColor = value; } } /// summary /// コンストラクタ /// /summary public DragAbleDataGridView() { this.InitCtrl(); } /// summary /// コンポーネントの初期化処理 /// /summary private void InitCtrl() { // DataGridViewの初期設定 this.AutoGenerateColumns = false; this.BackgroundColor = Color.White; this.CellBorderStyle = DataGridViewCellBorderStyle.None; this.RowHeadersVisible = false; this.AllowUserToResizeRows = false; this.SelectionMode = DataGridViewSelectionMode.FullRowSelect; this.AllowUserToAddRows = false; this.AllowUserToDeleteRows = false; this.AllowDrop = true; this.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; this.ColumnHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.False; // イベントを追加 this.DragDrop += new DragEventHandler(DragAbleDataGridView_DragDrop); this.DragEnter += new DragEventHandler(DragAbleDataGridView_DragEnter); this.MouseDown += new MouseEventHandler(DragAbleDataGridView_MouseDown); this.MouseMove += new MouseEventHandler(DragAbleDataGridView_MouseMove); this.DragOver += new DragEventHandler(DragAbleDataGridView_DragOver); this.DragLeave += new EventHandler(DragAbleDataGridView_DragLeave); this.QueryContinueDrag += new QueryContinueDragEventHandler(DragAbleDataGridView_QueryContinueDrag); this.RowValidating += new DataGridViewCellCancelEventHandler(DragAbleDataGridView_RowValidating); // ドラッグ中に表示するバーを追加 this.Controls.Add(lblBar); lblBar.Visible = false; lblBar.BackColor = Color.Red; lblBar.Size = new Size(this.Width, 2); } /// summary /// MouseDownイベント /// /summary /// param name="sender" /param /// param name="e" /param private void DragAbleDataGridView_MouseDown(object sender, MouseEventArgs e) { mintCurrentRowIndex = -1; // 左クリック以外はリターン if ((e.Button MouseButtons.Left) != MouseButtons.Left) { return; } // セルクリック以外はリターン DataGridView.HitTestInfo hitInfo = this.HitTest(e.X, e.Y); if (hitInfo.Type != DataGridViewHitTestType.Cell) { return; } mintCurrentRowIndex = hitInfo.RowIndex; // 既に選択されているセルを選択している場合(ここの動作がうまくいかない…) if (this.Rows[mintCurrentRowIndex].Selected ModifierKeys == Keys.None) { ReSetDragRowsIndexies(); Flg = true; } // 未選択のセルを選択している場合 else { dragRowIndex = null; Flg = false; } } /// summary /// 行の検証時の処理 /// /summary /// param name="sender" /param /// param name="e" /param private void DragAbleDataGridView_RowValidating(object sender, DataGridViewCellCancelEventArgs e) { if (Flg) { e.Cancel = true; Flg = false; } } /// summary /// MouseMoveイベント /// /summary /// param name="sender" /param /// param name="e" /param private void DragAbleDataGridView_MouseMove(object sender, MouseEventArgs e) { // 左ボタン以外はリターン if ((e.Button MouseButtons.Left) != MouseButtons.Left) { return; } // Row未選択はリターン if (mintCurrentRowIndex == -1) { return; } // ドラッグ開始 this.DoDragDrop(mintCurrentRowIndex, DragDropEffects.Move); } /// summary /// ドラッグ対象行のインデックスを記憶 /// /summary private void ReSetDragRowsIndexies() { dragRowIndex = new int[this.SelectedRows.Count]; for (int i = 0; i this.SelectedRows.Count; i++) { dragRowIndex[i] = this.SelectedRows[i].Index; } } /// summary /// DragOverイベント /// /summary /// param name="sender" /param /// param name="e" /param private void DragAbleDataGridView_DragOver(object sender, DragEventArgs e) { if (mintCurrentRowIndex == -1) { return; } e.Effect = DragDropEffects.Move; if (dragRowIndex == null) { ReSetDragRowsIndexies(); } // ドラッグ位置を取得 Point clientPoint = this.PointToClient(new Point(e.X, e.Y)); DataGridView.HitTestInfo hitInfo = this.HitTest(clientPoint.X, clientPoint.Y); mboolMoveToEndRowFlg = false; if (hitInfo.RowIndex == -1) { if (mintCurrentRowIndex == this.Rows.Count - 1) { mboolMoveToEndRowFlg = true; } } else { mintNextRowIndex = hitInfo.RowIndex; } if (mboolMoveToEndRowFlg) { Rectangle rec = this.GetRowDisplayRectangle(mintNextRowIndex, true); lblBar.Location = new Point(0, rec.Bottom); lblBar.Visible = true; } else if (mintCurrentRowIndex == mintNextRowIndex mintCurrentRowIndex == this.Rows.Count - 1) { Rectangle rec = this.GetRowDisplayRectangle(mintNextRowIndex, true); lblBar.Location = new Point(0, rec.Top); lblBar.Visible = true; } else if (mintCurrentRowIndex != mintNextRowIndex) { Rectangle rec = this.GetRowDisplayRectangle(mintNextRowIndex, true); lblBar.Location = new Point(0, rec.Top); mintCurrentRowIndex = mintNextRowIndex; lblBar.Visible = true; } } /// summary /// DataGridViewの外へドラッグしたらドラッグをキャンセル /// /summary /// param name="sender" /param /// param name="e" /param private void DragAbleDataGridView_DragLeave(object sender, EventArgs e) { if (!lblBar.Visible) { return; } ExitDrag(); } /// summary /// DragEnter /// /summary /// param name="sender" /param /// param name="e" /param private void DragAbleDataGridView_DragEnter(object sender, DragEventArgs e) { if (lblBar.Visible) { return; } e.Effect = DragDropEffects.All; } /// summary /// ドラッグ継続中 /// /summary /// param name="sender" /param /// param name="e" /param private void DragAbleDataGridView_QueryContinueDrag(object sender, QueryContinueDragEventArgs e) { // 右クリック押下時 if ((e.KeyState 2) == 2) { // ドラッグをキャンセル e.Action = DragAction.Cancel; ExitDrag(); } } /// summary /// 行データの移動 /// /summary /// param name="FromIndex" /param /// param name="ToIndex" /param /// returns 実際の移動先インデックス /returns private int MoveTo(int FromIndex, int ToIndex) { DataGridViewRow row; int MoveToIndex = ToIndex; if (FromIndex != ToIndex) { row = (DataGridViewRow)this.Rows[FromIndex].Clone(); for (int i = 0; i this.Columns.Count; i++) { row.Cells[i].Value = this.Rows[FromIndex].Cells[i].Value; } if (FromIndex ToIndex) { this.Rows.RemoveAt(FromIndex); this.Rows.Insert(ToIndex, row); } else if (FromIndex ToIndex) { if (mboolMoveToEndRowFlg) { this.Rows.RemoveAt(FromIndex); this.Rows.Insert(ToIndex, row); } else { this.Rows.RemoveAt(FromIndex); this.Rows.Insert(ToIndex - 1, row); MoveToIndex = ToIndex - 1; } } } return MoveToIndex; } private void DragAbleDataGridView_DragDrop(object sender, DragEventArgs e) { // 行のDragDropの場合 if (lblBar.Visible) { Flg = false; Array.Sort(dragRowIndex); int ShiftFront = 0; int ShiftBack = 0; int MoveFromIndex = 0; int MoveToIndex = 0; int MinRowIndex = mintCurrentRowIndex; int MaxRowIndex = mintCurrentRowIndex; int SelectionStaIndex = 0; // 行を移動 for (int i = 0; i dragRowIndex.GetLength(0); i++) { MoveFromIndex = dragRowIndex[i]; MoveToIndex = mintCurrentRowIndex; if (MinRowIndex MoveFromIndex) { MinRowIndex = MoveFromIndex; } else if (MinRowIndex MoveToIndex) { MinRowIndex = MoveToIndex; } if (MaxRowIndex MoveFromIndex) { MaxRowIndex = MoveFromIndex; } else if (MaxRowIndex MoveToIndex) { MaxRowIndex = MoveToIndex; } if (i 0) { if (MoveFromIndex MoveToIndex) { ShiftFront--; MoveFromIndex += ShiftFront; } else if (MoveFromIndex MoveToIndex) { if (dragRowIndex[i - 1] = MoveToIndex) { ShiftBack++; MoveToIndex += ShiftBack; } } } if (i == 0) { SelectionStaIndex = MoveTo(MoveFromIndex, MoveToIndex); } else { MoveTo(MoveFromIndex, MoveToIndex); } } // 移動後の行を選択 this.CurrentCell = this.Rows[SelectionStaIndex + ShiftFront].Cells[0]; this.ClearSelection(); for (int i = 0; i dragRowIndex.GetLength(0); i++) { this.Rows[SelectionStaIndex + ShiftFront + i].Selected = true; } ExitDrag(); } // DataGridView外からのDragDropの場合 else { //DragDropされたファイルパスをセルに追加 if (e.Data.GetDataPresent(DataFormats.FileDrop)) { foreach (string filePath in (string[])e.Data.GetData(DataFormats.FileDrop)) { if (this.Columns.Count 0) { this.Rows.Add(); this.Rows[this.Rows.Count - 1].Cells[0].Value = filePath; } } } } } /// summary /// ドラッグの終了処理 /// /summary private void ExitDrag() { mintCurrentRowIndex = -1; //_DragMode = eDraggingMode.None; lblBar.Visible = false; this.DoDragDrop(mintCurrentRowIndex, DragDropEffects.None); } } }
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/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/memo77/pages/46.html
PageLastUpdate 2007-11-13/today - /yesterday - DataGridViewSynchronizer 2007/11/13 上下に並べたふたつのDataGridViewの列表示を同期させるクラス。 Option Strict On Public Class DataGridViewSynchronizer Private grd1 As DataGridView Private grd2 As DataGridView Public Sub Add(ByRef datagridview1 As DataGridView, ByRef datagridview2 As DataGridView) Try Me.grd1 = datagridview1 Me.grd2 = datagridview2 For Each column As DataGridViewColumn In grd1.Columns If grd2.Columns.Contains(column.Name) = False Then MessageBox.Show("連動させるグリッドの列構成が違います。完全に一致したグリッドでなければ連動させることはできません。") End If Next For Each column As DataGridViewColumn In grd2.Columns If grd1.Columns.Contains(column.Name) = False Then MessageBox.Show("連動させるグリッドの列構成が違います。完全に一致したグリッドでなければ連動させることはできません。") End If Next grd1.SuspendLayout() grd2.SuspendLayout() For Each column1 As DataGridViewColumn In grd1.Columns Dim column2 As DataGridViewColumn = grd2.Columns(column1.Name) column2.DisplayIndex = column1.DisplayIndex column2.Frozen = column1.Frozen column2.HeaderText = column1.HeaderText column2.Resizable = column1.Resizable column2.Visible = column1.Visible column2.Width = column1.Width column2.AutoSizeMode = DataGridViewAutoSizeColumnMode.None Next AddHandler grd1.ColumnWidthChanged, AddressOf ColumnWidthChanged1 AddHandler grd1.ColumnDisplayIndexChanged, AddressOf ColumnDisplayIndexChanged1 AddHandler grd1.Scroll, AddressOf Scroll1 AddHandler grd1.ColumnStateChanged, AddressOf ColumnStateChanged1 AddHandler grd2.ColumnWidthChanged, AddressOf ColumnWidthChanged2 AddHandler grd2.ColumnDisplayIndexChanged, AddressOf ColumnDisplayIndexChanged2 AddHandler grd2.Scroll, AddressOf Scroll2 AddHandler grd2.ColumnStateChanged, AddressOf ColumnStateChanged2 grd1.ResumeLayout() grd2.ResumeLayout() Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Public Sub ColumnWidthChanged1(ByVal sender As Object, ByVal e As DataGridViewColumnEventArgs) Try If grd2.Columns(e.Column.Name).Width e.Column.Width Then grd2.Columns(e.Column.Name).Width = e.Column.Width End If Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Public Sub ColumnDisplayIndexChanged1(ByVal sender As Object, ByVal e As DataGridViewColumnEventArgs) Try If grd2.Columns(e.Column.Name).DisplayIndex e.Column.DisplayIndex Then grd2.Columns(e.Column.Name).DisplayIndex = e.Column.DisplayIndex End If Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Public Sub Scroll1(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Try If grd2.HorizontalScrollingOffset grd1.HorizontalScrollingOffset Then grd2.HorizontalScrollingOffset = grd1.HorizontalScrollingOffset End If Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Public Sub ColumnStateChanged1(ByVal sender As Object, ByVal e As DataGridViewColumnStateChangedEventArgs) Try Select Case e.StateChanged Case DataGridViewElementStates.Frozen If grd2.Columns(e.Column.Name).Frozen e.Column.Frozen Then grd2.Columns(e.Column.Name).Frozen = e.Column.Frozen End If Case DataGridViewElementStates.Resizable If grd2.Columns(e.Column.Name).Resizable e.Column.Resizable Then grd2.Columns(e.Column.Name).Resizable = e.Column.Resizable End If Case DataGridViewElementStates.Selected If grd2.Columns(e.Column.Name).Selected e.Column.Selected Then grd2.Columns(e.Column.Name).Selected = e.Column.Selected End If Case DataGridViewElementStates.Visible If grd2.Columns(e.Column.Name).Visible e.Column.Visible Then grd2.Columns(e.Column.Name).Visible = e.Column.Visible End If End Select Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Public Sub ColumnWidthChanged2(ByVal sender As Object, ByVal e As DataGridViewColumnEventArgs) Try If grd1.Columns(e.Column.Name).Width e.Column.Width Then grd1.Columns(e.Column.Name).Width = e.Column.Width End If Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Public Sub ColumnDisplayIndexChanged2(ByVal sender As Object, ByVal e As DataGridViewColumnEventArgs) Try If grd1.Columns(e.Column.Name).DisplayIndex e.Column.DisplayIndex Then grd1.Columns(e.Column.Name).DisplayIndex = e.Column.DisplayIndex End If Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Public Sub Scroll2(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Try If grd1.HorizontalScrollingOffset grd2.HorizontalScrollingOffset Then grd1.HorizontalScrollingOffset = grd2.HorizontalScrollingOffset End If Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Public Sub ColumnStateChanged2(ByVal sender As Object, ByVal e As DataGridViewColumnStateChangedEventArgs) Try Select Case e.StateChanged Case DataGridViewElementStates.Frozen If grd1.Columns(e.Column.Name).Frozen e.Column.Frozen Then grd1.Columns(e.Column.Name).Frozen = e.Column.Frozen End If Case DataGridViewElementStates.Resizable If grd1.Columns(e.Column.Name).Resizable e.Column.Resizable Then grd1.Columns(e.Column.Name).Resizable = e.Column.Resizable End If Case DataGridViewElementStates.Selected If grd1.Columns(e.Column.Name).Selected e.Column.Selected Then grd1.Columns(e.Column.Name).Selected = e.Column.Selected End If Case DataGridViewElementStates.Visible If grd1.Columns(e.Column.Name).Visible e.Column.Visible Then grd1.Columns(e.Column.Name).Visible = e.Column.Visible End If End Select Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub Public Sub Remove() Try RemoveHandler grd1.ColumnWidthChanged, AddressOf ColumnWidthChanged1 RemoveHandler grd1.ColumnDisplayIndexChanged, AddressOf ColumnDisplayIndexChanged1 RemoveHandler grd1.Scroll, AddressOf Scroll1 RemoveHandler grd1.ColumnStateChanged, AddressOf ColumnStateChanged1 RemoveHandler grd2.ColumnWidthChanged, AddressOf ColumnWidthChanged2 RemoveHandler grd2.ColumnDisplayIndexChanged, AddressOf ColumnDisplayIndexChanged2 RemoveHandler grd2.Scroll, AddressOf Scroll2 RemoveHandler grd2.ColumnStateChanged, AddressOf ColumnStateChanged2 Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Sub End Class comment このページの記述で聞きたいこととか間違ってることとかありましたらコメントを。 名前 コメント すべてのコメントを見る