Limpar uma datagridview em C#

high

Membro
Tou a desenvolver uma aplicação em C# que acede a uma base de dados em Access (que por sua vez está ligado a uma base de dados em SQL).

Estou a criar um gerador de frases SQL que depois envia à base de dados em access e recebe de volta os resultados.

Por outras palavras, tenho um conjunto de comboboxes e check boxes que o utilizador escolhe e gera a frase SQL. depois este é enviado para o Access e recebe de volta um objecto que depois mostra num datagridview.

Até aqui não há problemas (ironicamente, penso que seja o mais complexo). A minha dificuldade esta na actualização do datagrid. Por exemplo se o utilizador escolher no inicio apenas nome e morada, estes são apresentados. Mas de seguida se o utilizador escolher Nome, e telefone, estes são apresentados mas a morada continua no datagridview.

já tentei dizer antes que o datagrid deve ser limpo através dos comandos
datagridview.datasource=null;
datagridview.resetbindings();

mas o problema persiste :S.

Alguem tem uma ideia de como limpar o datagrid (incluindo os nomes das colunas), antes de fazer uma nova pesquiza ao access?

Cumps,
High
 
Já tentei essa solução mas obtenho o seguinte erro.

Can not intercept exception. Debugged program can not be continued and properties can not be evaluated.
System.ArgumentException: Cannot clear this list.
at System.Data.DataView.System.Collections.IList.Clear
at System.Windows.Forms.DataGridViewRowCollection.Clear
at ClientApp.RawData.Button4Click in c:\Users\********
at System.Windows.Forms.Control.OnClick
at System.Windows.Forms.Button.OnClick
at System.Windows.Forms.Button.OnMouseUp
at System.Windows.Forms.Control.WmMouseUp
at System.Windows.Forms.Control.WndProc
at System.Windows.Forms.ButtonBase.WndProc
at System.Windows.Forms.Button.WndProc
at ControlNativeWindow.OnMessage
at ControlNativeWindow.WndProc
at System.Windows.Forms.NativeWindow.DebuggableCallback
at ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop
at ThreadContext.RunMessageLoopInner
at ThreadContext.RunMessageLoop
at System.Windows.Forms.Application.Run
at ClientApp.Program.Main in c:\Users\************

Há alguma soluçãi que me está a passar ao lado?

Cumps,
High
 
Já tentei de ambas as formas. Ligar directamente à datatable e através da binding source. correntemente tá assim:

da.Fill(emp);
da.Update(emp);
//BindingSource to sync DataTable and DataGridView
BindingSource bSource = new BindingSource();
bSource.DataSource = emp;

dataGridView1.DataSource=emp;


também já estive com o datagridview ligado directamente à binding source:

da.Fill(emp);
da.Update(emp);
//BindingSource to sync DataTable and DataGridView
BindingSource bSource = new BindingSource();
bSource.DataSource = emp;

dataGridView1.DataSource=bSource;

Com ambos os métodos obtenho o mesmo erro.
 
Já experimentas-te meter a datasource = null e depois remover as colunas e rows?

Código:
DataGridView1.DataSource=null; [COLOR="YellowGreen"]//Remover a datasource[/COLOR]
DataGridView1.Columns.Clear(); [COLOR="YellowGreen"]//Remover as colunas[/COLOR]
DataGridView1.Rows.Clear();    [COLOR="YellowGreen"]//Remover as linhas[/COLOR]
DataGridView1.Refresh();    [COLOR="YellowGreen"]//Para a grid se actualizar[/COLOR]
 
Fantástico. Já funcionou. Muito Obrigado PNDmartins.

Só um detalhe para o caso de futuros utilizadores verem este post. A datatable também tem de ser limpo ou seja,

DataGridView1.DataSource=null; //Remover a datasource
DataGridView1.Columns.Clear(); //Remover as colunas
DataGridView1.Rows.Clear(); //Remover as linhas
DataGridView1.Refresh(); //Para a grid se actualizar
emp.clear(); //limpar a dataset que é utilizado para preencher a datagrid
 
Back
Topo