トップ回答者
DataGridViewで末尾行に移動したときに追加を確定する方法

質問
回答
-
こんな?
public class Form1 : Form { public Form1() { DataTable dt = new DataTable(); DataColumn col1 = new DataColumn("", typeof(int)); col1.Unique = true; col1.AutoIncrement = true; col1.AutoIncrementSeed = 0; col1.AutoIncrementStep = 1; col1.ReadOnly = false; dt.Columns.Add(col1); dt.Columns.Add(); DataGridView dgv = new DataGridView(); dgv.Dock = DockStyle.Fill; dgv.SelectionChanged += DataGridView_SelectionChanged; dgv.DataSource = new BindingSource(dt, null); this.Controls.Add(dgv); } private int rowIndexOld = -1; private void DataGridView_SelectionChanged(object sender, EventArgs e) { DataGridView grid = (DataGridView)sender; if (grid.CurrentCell != null) { int rowIndexNew = grid.CurrentCell.RowIndex; if ((rowIndexOld != rowIndexNew) && (rowIndexNew == grid.RowCount - 1)) { BindingSource source = (BindingSource)grid.DataSource; object pos = source.Current; source.CurrencyManager.EndCurrentEdit();//確定 source.Position = source.IndexOf(pos); //DatagridViewがソートされていると確定で並べ替えされて行がずれるので一致させる } rowIndexOld = rowIndexNew; } } }
- 回答としてマーク 高橋 春樹 2009年9月17日 2:34
-
末尾行に移動したときに追加したいのです。
噛み合っていないようで、すみません。末尾行に移動した時点で、列が全て空白(未入力)のレコードを追加したいということなのでしょうか? 通常はこのような仕様にはしないと思いますが、もしそうだとすれば、DataGridView1.CurrentRow.IsNewRowのようにして新規行かどうか判断ができますから、そこで列が全て空白(未入力)のレコードを追加することができると思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク 高橋 春樹 2009年9月17日 2:34
すべての返信
-
お返事ありがとうございます。
やって見ました。
using System; using System.Windows.Forms; namespace XML { public partial class Form1:Form { public Form1() { InitializeComponent(); } private void dataGridView1_DefaultValuesNeeded(object sender,DataGridViewRowEventArgs e) { dataGridView1.EndEdit(); } private void dataGridView1_SelectionChanged(object sender,EventArgs e) { dataGridView1.EndEdit(); } private void dataGridView1_CellEnter(object sender,DataGridViewCellEventArgs e) { dataGridView1.EndEdit(); } } }
これは末尾のセルを選択したときはもちろん通常の選択でも確定します。
通常のセルでは処理されないのは分かります。
しかし末尾行でも追加されることはありません。
それは末尾行に移動しただけでは"編集"しているわけではないからです。
末尾行に移動したときに追加したいのです。 -
こんな?
public class Form1 : Form { public Form1() { DataTable dt = new DataTable(); DataColumn col1 = new DataColumn("", typeof(int)); col1.Unique = true; col1.AutoIncrement = true; col1.AutoIncrementSeed = 0; col1.AutoIncrementStep = 1; col1.ReadOnly = false; dt.Columns.Add(col1); dt.Columns.Add(); DataGridView dgv = new DataGridView(); dgv.Dock = DockStyle.Fill; dgv.SelectionChanged += DataGridView_SelectionChanged; dgv.DataSource = new BindingSource(dt, null); this.Controls.Add(dgv); } private int rowIndexOld = -1; private void DataGridView_SelectionChanged(object sender, EventArgs e) { DataGridView grid = (DataGridView)sender; if (grid.CurrentCell != null) { int rowIndexNew = grid.CurrentCell.RowIndex; if ((rowIndexOld != rowIndexNew) && (rowIndexNew == grid.RowCount - 1)) { BindingSource source = (BindingSource)grid.DataSource; object pos = source.Current; source.CurrencyManager.EndCurrentEdit();//確定 source.Position = source.IndexOf(pos); //DatagridViewがソートされていると確定で並べ替えされて行がずれるので一致させる } rowIndexOld = rowIndexNew; } } }
- 回答としてマーク 高橋 春樹 2009年9月17日 2:34
-
末尾行に移動したときに追加したいのです。
噛み合っていないようで、すみません。末尾行に移動した時点で、列が全て空白(未入力)のレコードを追加したいということなのでしょうか? 通常はこのような仕様にはしないと思いますが、もしそうだとすれば、DataGridView1.CurrentRow.IsNewRowのようにして新規行かどうか判断ができますから、そこで列が全て空白(未入力)のレコードを追加することができると思います。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/- 回答としてマーク 高橋 春樹 2009年9月17日 2:34