Bonjour,
J'ai actuellment un datagrid dont la datasource peux changer, avec une
seule colonne ayant comme style 'DataGridTextBoxColumn' en lecture
seule (nameColumnStyle.ReadOnly = true;).
Quand une case est séléctionnée et que le datasource est changé la case
sélectionée reste à l'écran alors que le reste c'est éffacé.
Voic le code qui amène cette erreur, il suffit de séléctioner une case
du datagid et de cliquer sur le bouton pour voir le bug. Ce bug est
reproductible si un autre datasource est mis pas seulement quand il est
mit a null comme ici.
voici un code complet il suffit de le copier dans un fichier pour qu'il fonctionne.
using System;
using System.Data;
using System.Windows.Forms;
using System.Drawing;
public class MyForm : Form
{
private DataTable namesDataTable;
private DataGrid grid = new DataGrid();
private Button button = new Button();
private DataSet namesDataSet = new DataSet();
public MyForm() : base()
{
InitForm();
namesDataTable = new DataTable("NamesTable");
namesDataTable.Columns.Add(new DataColumn("Name"));
DataColumn dateColumn = new DataColumn
("Date", typeof(DateTime));
dateColumn.DefaultValue = DateTime.Today;
namesDataTable.Columns.Add(dateColumn);
namesDataSet.Tables.Add(namesDataTable);
grid.DataSource = namesDataSet;
grid.DataMember = "NamesTable";
AddGridStyle();
AddData();
}
private void AddGridStyle()
{
DataGridTableStyle myGridStyle = new DataGridTableStyle();
myGridStyle.MappingName = "NamesTable";
DataGridTextBoxColumn nameColumnStyle =
new DataGridTextBoxColumn();
nameColumnStyle.MappingName = "Name";
nameColumnStyle.HeaderText = "Name";
nameColumnStyle.ReadOnly = true;
myGridStyle.GridColumnStyles.Add(nameColumnStyle);
grid.TableStyles.Add(myGridStyle);
}
private void AddData()
{
DataRow dRow = namesDataTable.NewRow();
dRow["Name"] = "Name 1";
namesDataTable.Rows.Add(dRow);
dRow = namesDataTable.NewRow();
dRow["Name"] = "Name 2";
namesDataTable.Rows.Add(dRow);
dRow = namesDataTable.NewRow();
dRow["Name"] = "Name 3";
namesDataTable.Rows.Add(dRow);
dRow = namesDataTable.NewRow();
dRow["Name"] = "Name 4";
namesDataTable.Rows.Add(dRow);
dRow = namesDataTable.NewRow();
dRow["Name"] = "Name 5";
namesDataTable.Rows.Add(dRow);
namesDataTable.AcceptChanges();
}
private void button_Click(object o, System.EventArgs a)
{
if (grid.DataSource == namesDataSet)
grid.DataSource = null;
else
{
grid.DataSource = namesDataSet;
grid.DataMember = "NamesTable";
}
}
private void InitForm()
{
this.Size = new Size(500, 500);
grid.Size = new Size(350, 250);
grid.TabStop = true;
grid.TabIndex = 1;
button.Location = new System.Drawing.Point(200, 400);
button.Text = "bug";
button.Click += new EventHandler(button_Click);
this.StartPosition = FormStartPosition.CenterScreen;
this.Controls.Add(grid);
this.Controls.Add(button);
}
[STAThread]
public static void Main()
{
MyForm myForm1 = new MyForm();
myForm1.ShowDialog();
}
}
je cherche une méthode pour rafraichir correctement mon datagrid pour
faire disparaitre cette case même si elle est sélectionnée.
merci, de votre aide.
Afficher la suite