By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
459,635 Members | 1,898 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 459,635 IT Pros & Developers. It's quick & easy.

DataGrid - Error Modifying DataTable rows after adding new row with InsertAt()

P: n/a
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.t heGrid)).BeginInit();

((System.ComponentModel.ISupportInitialize)(this.m yDataSet)).BeginInit();

((System.ComponentModel.ISupportInitialize)(this.r ateTable)).BeginInit();
this.SuspendLayout();
//
// theGrid
//
this.theGrid.Anchor =
((System.Windows.Forms.AnchorStyles)((((System.Win dows.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.Windo ws.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.Windo ws.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.Windo ws.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.CenterScree n;
this.Text = "TestDataGrid";
this.Load += new
System.EventHandler(this.TestDataGrid_Load);

((System.ComponentModel.ISupportInitialize)(this.t heGrid)).EndInit();

((System.ComponentModel.ISupportInitialize)(this.m yDataSet)).EndInit();

((System.ComponentModel.ISupportInitialize)(this.r ateTable)).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 );
}
}
}
}

Aug 14 '05 #1
Share this question for a faster answer!
Share on Google+

This discussion thread is closed

Replies have been disabled for this discussion.