If you are filling the DataSet from a database, have you tried using the DataAdapter's ColumnMappings rather than renaming the columns after the fact? Or does your design prohibit this? Have you tried removing the data bindings before renaming and adding them back afterwards?
Bob Beauchemin [EMAIL PROTECTED] -----Original Message----- From: David Ferguson [mailto:[EMAIL PROTECTED]] Sent: Tuesday, May 21, 2002 8:22 AM To: [EMAIL PROTECTED] Subject: [DOTNET] How to work around bug in DataSet? How to work around bug in DataSet? The DataSet wont clear if ColumnNames Modified. Any help or a work around would be greatly appreciated. If you modify dataSet.Tables[].Columns[].ColumnName the dataSet will accumulate more and more columns. It appears that something is holding on to a reference in the Tables. To duplicate the problem use VS.NET to create a form with private System.Windows.Forms.DataGrid dataGrid1; private System.Windows.Forms.Button loadButton; Add the following private fields and a click event. Notice that each time you click the button an addtional set of columns is added. // ^ ^ ^ Form Designer Code ^ ^ ^ DataSet dataSet = new DataSet(); SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("SELECT * FROM Jobs", "User Id=sa;" + "Password=;" + "Initial Catalog=Northwind;" ); private void loadButton_Click(object sender, System.EventArgs e) { // Supposed to remove old data and tables dataSet.Clear(); sqlDataAdapter.Fill( dataSet ); // Decorate the column names // Something about this causes the table structure to hang around. DataTable dt = dataSet.Tables[0]; for (int i = 0; i < dt.Columns.Count; ++i) dt.Columns[i].ColumnName += "!"; if ( dataGrid1.DataSource == null ) dataGrid1.SetDataBinding( dataSet, "Table" ); } Thank...David ------------------------------------ --- Complete Listing --------------- ------------------------------------ using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; using System.Data.SqlClient; namespace Data_SetGrid_Wont_Clear { public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.DataGrid dataGrid1; private System.Windows.Forms.Button loadButton; private System.ComponentModel.Container components = null; public Form1() { InitializeComponent(); } protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code private void InitializeComponent() { this.dataGrid1 = new System.Windows.Forms.DataGrid(); this.loadButton = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit(); this.SuspendLayout(); // // dataGrid1 // this.dataGrid1.DataMember = ""; this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText; this.dataGrid1.Location = new System.Drawing.Point(8, 8); this.dataGrid1.Name = "dataGrid1"; this.dataGrid1.ReadOnly = true; this.dataGrid1.Size = new System.Drawing.Size(280, 180); this.dataGrid1.TabIndex = 0; // // loadButton // this.loadButton.Location = new System.Drawing.Point(8, 200); this.loadButton.Name = "loadButton"; this.loadButton.TabIndex = 1; this.loadButton.Text = "&Load"; this.loadButton.Click += new System.EventHandler(this.loadButton_Click); // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(296, 229); this.Controls.AddRange(new System.Windows.Forms.Control[] { this.loadButton, this.dataGrid1}); this.Name = "Form1"; this.Text = "DataSet/DataGrid Won\'t Clear"; ((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit(); this.ResumeLayout(false); } #endregion [STAThread] static void Main() { Application.Run(new Form1()); } // ^ ^ ^ Form Designer Code ^ ^ ^ DataSet dataSet = new DataSet(); SqlDataAdapter sqlDataAdapter = new SqlDataAdapter("SELECT * FROM Jobs", "User Id=sa;" + "Password=;" + "Initial Catalog=Northwind;" ); private void loadButton_Click(object sender, System.EventArgs e) { // Supposed to remove old data and tables dataSet.Clear(); sqlDataAdapter.Fill( dataSet ); // Decorate the column names // Something about this causes the table structure to hang around. DataTable dt = dataSet.Tables[0]; for (int i = 0; i < dt.Columns.Count; ++i) dt.Columns[i].ColumnName += "!"; if ( dataGrid1.DataSource == null ) dataGrid1.SetDataBinding( dataSet, "Table" ); } } } You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com. You can read messages from the DOTNET archive, unsubscribe from DOTNET, or subscribe to other DevelopMentor lists at http://discuss.develop.com.