DataGrid - InsertAt() - Error Modifying rows after new row inserte

G

Guest

After inserting a new data row to a DataTable that is bound to a datagrid, I am
unable to change data in a row that is after the newly added row without
getting
bizarre results.

I have added the full code for the test below. Create a project drop in the
code and run.

Any help would be appreciated.

Cheers,
Dave


Test #1
======================
1) Click on the row where ID = 1
2) Click "Add Row" button
3) Click on the cell ID = 2 Number = 4
4) Change the number from 4 to 5
5) Move off the row (i.e. hit the down arrow key)
6) Notice there are 2 rows with ID = 2 now
2, 5, 6
2, 4, 6


Test #2
======================
1) Click on the row where ID = 1
2) Click "Add Row" button
3) Click "Remove Binding"
4) Click "Add Binding"
5) Click on the cell ID = 2 Number = 4
6) Change the number from 4 to 5
7) Move off the row (i.e. hit the down arrow key)
8) Notice there are 2 rows with ID = 2 now
2, 5, 6
2, 4, 6

==========================

using System;
using System.Data;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace Controls
{
/// <summary>
/// Summary description for TestDataGrid.
/// </summary>
public class TestDataGrid : System.Windows.Forms.Form
{
private int idCounter = 100;

#region Unimportant Window stuff

private System.Windows.Forms.DataGrid theGrid;
private System.Windows.Forms.Button addButton;
private System.Data.DataSet myDataSet;
private System.Data.DataTable rateTable;
private System.Data.DataColumn dataColumn1;
private System.Data.DataColumn dataColumn2;
private System.Data.DataColumn dataColumn3;
private System.Windows.Forms.Button removeBinding;
private System.Windows.Forms.Button addBinding;
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.Container components = null;

public TestDataGrid()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();

//
// TODO: Add any constructor code after InitializeComponent call
//
}

/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.theGrid = new System.Windows.Forms.DataGrid();
this.myDataSet = new System.Data.DataSet();
this.rateTable = new System.Data.DataTable();
this.dataColumn1 = new System.Data.DataColumn();
this.dataColumn2 = new System.Data.DataColumn();
this.dataColumn3 = new System.Data.DataColumn();
this.addButton = new System.Windows.Forms.Button();
this.removeBinding = new System.Windows.Forms.Button();
this.addBinding = new System.Windows.Forms.Button();
((System.ComponentModel.ISupportInitialize)(this.theGrid)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.myDataSet)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.rateTable)).BeginInit();
this.SuspendLayout();
//
// theGrid
//
this.theGrid.Anchor =
((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top
| System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.theGrid.DataMember = "RateTable";
this.theGrid.DataSource = this.myDataSet;
this.theGrid.HeaderForeColor = System.Drawing.SystemColors.ControlText;
this.theGrid.Location = new System.Drawing.Point(8, 40);
this.theGrid.Name = "theGrid";
this.theGrid.Size = new System.Drawing.Size(368, 184);
this.theGrid.TabIndex = 0;
//
// myDataSet
//
this.myDataSet.DataSetName = "NewDataSet";
this.myDataSet.Locale = new System.Globalization.CultureInfo("en-US");
this.myDataSet.Tables.AddRange(new System.Data.DataTable[] {
this.rateTable});
//
// rateTable
//
this.rateTable.Columns.AddRange(new System.Data.DataColumn[] {
this.dataColumn1,
this.dataColumn2,
this.dataColumn3});
this.rateTable.TableName = "RateTable";
//
// dataColumn1
//
this.dataColumn1.ColumnName = "ID";
this.dataColumn1.DataType = typeof(int);
//
// dataColumn2
//
this.dataColumn2.ColumnName = "Number";
this.dataColumn2.DataType = typeof(int);
//
// dataColumn3
//
this.dataColumn3.ColumnName = "Price";
this.dataColumn3.DataType = typeof(int);
//
// addButton
//
this.addButton.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.addButton.Location = new System.Drawing.Point(16, 256);
this.addButton.Name = "addButton";
this.addButton.TabIndex = 1;
this.addButton.Text = "Add Row";
this.addButton.Click += new System.EventHandler(this.addButton_Click);
//
// removeBinding
//
this.removeBinding.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.removeBinding.Location = new System.Drawing.Point(136, 256);
this.removeBinding.Name = "removeBinding";
this.removeBinding.Size = new System.Drawing.Size(104, 23);
this.removeBinding.TabIndex = 3;
this.removeBinding.Text = "Remove Binding";
this.removeBinding.Click += new
System.EventHandler(this.removeBinding_Click);
//
// addBinding
//
this.addBinding.Anchor =
((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.addBinding.Location = new System.Drawing.Point(288, 256);
this.addBinding.Name = "addBinding";
this.addBinding.Size = new System.Drawing.Size(104, 23);
this.addBinding.TabIndex = 4;
this.addBinding.Text = "Add Binding";
this.addBinding.Click += new System.EventHandler(this.addBinding_Click);
//
// TestDataGrid
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(400, 293);
this.Controls.Add(this.addBinding);
this.Controls.Add(this.removeBinding);
this.Controls.Add(this.addButton);
this.Controls.Add(this.theGrid);
this.Name = "TestDataGrid";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "TestDataGrid";
this.Load += new System.EventHandler(this.TestDataGrid_Load);
((System.ComponentModel.ISupportInitialize)(this.theGrid)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.myDataSet)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.rateTable)).EndInit();
this.ResumeLayout(false);

}
#endregion

#endregion

/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void addButton_Click(object sender, System.EventArgs e)
{
Random random = new Random(idCounter);


DataRow row = rateTable.NewRow();
int position = theGrid.CurrentRowIndex + 1;

row[0] = idCounter++;
row[1] = (int)( random.NextDouble() * 100 );
row[2] = (int)( random.NextDouble() * 10 );

rateTable.Rows.InsertAt( row, position );
rateTable.AcceptChanges();
}


/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void removeBinding_Click(object sender, System.EventArgs e)
{
this.theGrid.DataSource = null;
}

/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void addBinding_Click(object sender, System.EventArgs e)
{
this.theGrid.DataMember = "RateTable";
this.theGrid.DataSource = this.myDataSet;
}

/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TestDataGrid_Load(object sender, System.EventArgs e)
{
int numRows = 5;
DataRow row;

for (int i = 0; i < numRows; i++)
{
row = rateTable.NewRow();
row[0] = i * 1;
row[1] = i * 2;
row[2] = i * 3;

rateTable.Rows.Add( row );
}
}
}
}
 
Q

Questman

Dave said:
After inserting a new data row to a DataTable that is bound to a datagrid, I am
unable to change data in a row that is after the newly added row without
getting
bizarre results.

I have added the full code for the test below. Create a project drop in the
code and run.

Any help would be appreciated.

Cheers,
Dave

Sorry this isn't helpful to your question - but I was wondering if you
aren't the same Dave M. who wrote a few BBS games for the Major BBS
platform in the 1989-1993 timeframe?

Rick
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top