DataGridView : Problemi di ereditarietà

martedì 25 maggio 2010 - 18.44

lupen1981 Profilo | Newbie

Salve a tutti, mi sono imbattuto in un bel problema e ci sto impazzendo ormai da una settimana:

Ho un applicativo WinForm che dialoga con Database.

Per esigenze ho creato uno User Control

public partial class TableBrow : UserControl
{
public event EventHandlerItem RecordSelezionato;

internal DataTable dati
{
get
{
return (DataTable)dgrTable.DataSource;
}
}
internal BindingManagerBase bmb;

public TableBrow()
{
InitializeComponent();
}
void InitBinding()
{
bmb = this.BindingContext[dgrTable.DataSource];
bmb.PositionChanged += new EventHandler(bmb_PositionChanged);
bmb.CurrentChanged += new EventHandler(bmb_CurrentChanged);

OnRecordSelezionato(this);
}

void UnInitBinding()
{
bmb.PositionChanged -= bmb_PositionChanged;
bmb.CurrentChanged -= bmb_CurrentChanged;

bmb = null;
}


void bmb_PositionChanged(object sender, EventArgs e)
{
if (bmb.Position>-1)
OnRecordSelezionato(sender);

}

public void OnRecordSelezionato(Object sender)
{
if (RecordSelezionato != null && bmb.Current != null)
{
EventArgsItem e = new EventArgsItem();
e.ItemDataRow = ((DataRowView)bmb.Current).Row;
RecordSelezionato(sender, e);
}
}

public DataRow RecordCorrente
{
get
{
if (bmb.Position > -1 && bmb.Current != null)
return ((DataRowView)bmb.Current).Row;
else
return null;
}
}

public void LoadData(DataTable table)
{
dgrTable.SuspendLayout();
if (bmb != null)
bmb.SuspendBinding();

dgrTable.DataSource = table;

if (bmb != null)
bmb.ResumeBinding();


if (bmb == null)
InitBinding();


}

public void ClearData()
{
if (bmb != null)
UnInitBinding();

dgrTable.DataSource = null;

DataNavigator.nRecords = 0;
}

void dgrTable_ColumnHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
dgrTable.AutoResizeColumn(e.ColumnIndex, DataGridViewAutoSizeColumnMode.AllCells);
}


Come si evince dal codice c'è un BindingManagerBase e un metodo LoadData per impostare il DataSource del datagridview.

Fin qui Tutto ok il tutto funziona abbastanza alla grande.
Mi sono imbattuto in un problema diciamo visuale.

Praticamente il controllo si trova in un windowsForm ed è ancorato a tutti gli angoli in modo che al ridimensionamento del Form venga ridimensionato anche il controllo TableBrow.
Ed è qui che c'è il problema il controllo non viene renderizzato correttamente.

Se faccio la stessa cosa mettendo nel Form un controllo DataGridView invece del mio controllo TableBrow tutto funziona alla grande

Ho cercato di bypassare il problema creando una classe ed ereditando da DataGridView , l'ho posizionata sul Form ma stesso problema.

Ecco le immagini di Testimonianza il DataGridView superiore corrisponde al mio controllo
quello inferiore è un puro DataGridView


960x650 77Kb


ECCO COSA ACCADE QUANDO MASSIMIZZO IL FORM


1924x1056 112Kb



P.S. SE RIASSEGNO LA PROPRIETA' DATASOURCE IL CONTROLLO VIENE RIDISEGNATO.

non sò più dove sbattere la testa !.

Attendo Vostre
Lupen1981























Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5