update datagrid
-
giovedì 28 giugno 2012 13:36
Salve a tutti, rieccomi di nuovo con le prese di un datagrid.
qualcuno mi sa dire perchè se aggiorno con un pulsante il datagrid tutto funziona, mentre se lo faccio tramite un menuitem non ci riesco??
tramite il pulsante aggiorno il datagrid con la seguente istruzione:
archivioDataSetTabella1TableAdapter.Update(archivioDataSet.Tabella1);
faccio lo stesso con l'evento click della voce che ho creato nel menu
private void MenuItem_Click(object sender, RoutedEventArgs e) { archivioDataSetTabella1TableAdapter.Update(archivioDataSet.Tabella1); }
Tutte le risposte
-
giovedì 28 giugno 2012 13:41
-
giovedì 28 giugno 2012 13:52
Praticamente facendo click sulla voce di menu che creo in xaml non riesco ad aggiornare il tableadapter mentre se faccio click con un pulsante qualsiasi che creo riesco ad aggiornarlo....
-
giovedì 28 giugno 2012 14:11
Ciao mana973,
You wrote on 28/06/2012 :
Praticamente facendo click sulla voce di menu che creo in xaml non riesco ad aggiornare il tableadapter mentre se faccio click con un pulsante qualsiasi che creo riesco ad aggiornarlo....
non ho capito :-) ci provo io: deduco che tu abbia verificato, piazzando un breakpoint, che l'handler venga correttamente invocato ma quando clicchi sul menù gli aggiornamenti non si propagano correttamente al db, per l'esattezza l'ultima modifica che hai fatto non viene salvata.
è così? oppure è qualcosa di diverso?
.m
blog @ //milestone.topics.it -
giovedì 28 giugno 2012 14:36
Grazie Mauro per la pazienza, l'handler viene invocato correttamente. Il datagrid è inserito in un elemento grid il quale è una window.
Ho costruito il mio menu in alto della window e ho inserito varie voci ("MenuItem"), mentre nella parte inferiore della window ho inserito un pulsante("button").
il tableadapter viene riempito così:
tableadapter.fill(dataset.miatabella);
quando modifico un dato o inserisco un nuovo record del datagrid, aggiorno il tutto con l'evento click del pulsante:
tableadapter.update(dataset.tabella) e fino a qui funziona.
Perchè quando faccio click con la voce menuitem creata il comando tableadapter.update(dataset.tabella) non funziona????
-
giovedì 28 giugno 2012 14:41
Ciao mana973,
You wrote on 28/06/2012 :
Perchè quando faccio click con la voce menuitem creata il comando tableadapter.update(dataset.tabella) non funziona????
giusto per fare una prova: metti nella stessa Window una TextBox vuota, senza nulla, poi:
- avvii l'appllicazione;
- aggiungi una nuova riga nella griglia;
- sposti il focus nella TextBox;
- clicchi sulla voce di menù per salvare;che succede?
.m
blog @ //milestone.topics.it -
giovedì 28 giugno 2012 14:55
Ok ci provo, però adesso nn posso...:-((
Quello che hai detto è do spostare il focus da un elemento all'altro, forse hai ragione, cmq appena posso ci provo..
Per adesso grazie!!!!
A presto.
-
giovedì 28 giugno 2012 15:03
Ciao mana973,
You wrote on 28/06/2012 :
Ok ci provo, però adesso nn posso...:-((
Quello che hai detto è do spostare il focus da un elemento all'altro, forse hai ragione, cmq appena posso ci provo..se funziona così è nromale che avvenga perché i menù non fanno perdere il focus, mentre gli altri controlli si.
.m
blog @ //milestone.topics.it -
lunedì 2 luglio 2012 07:29
Buongiorno Mauro, scusami per l'attesa...
Ho fatto diverse prove, in effetti se vado a inserire una nuova riga e poi seleziono la textbox creata, il datagrid perde il focus e il comando di aggiornamento del tableadpter funziona.
Ma come faccio a far perdere il focus al datagrid mentre clicco sulla voce del menuitem???
-
lunedì 2 luglio 2012 07:43
Ciao mana973,
You wrote on 02/07/2012 :
Buongiorno Mauro, scusami per l'attesa...
Ho fatto diverse prove, in effetti se vado a inserire una nuova riga e poi seleziono la textbox creata, il datagrid perde il focus e il comando di aggiornamento del tableadpter funziona.
Ma come faccio a far perdere il focus al datagrid mentre clicco sulla voce del menuitem???non conosco bene la DataGrid, in teoria le righe sono IEditableObject, quindi sulla riga corrente ti dovrebbe bastare una chiamata a EndEdit().
.m
blog @ //milestone.topics.it -
lunedì 2 luglio 2012 08:24
Ho inserito nelll'evento click del menuitem questa riga
private void Salva_Dati(object sender, RoutedEventArgs e) { tabellaDataGrid.CommitEdit(); archivioDataSetTabellaTableAdapter.Update(archivioDataSet.Tabella); }Ma se non mi sposto nella textbox oppure nella riga sottostante non aggiorna proprio niente...perchè?
-
lunedì 2 luglio 2012 08:41
Mauro, ho fatto questa prova, ho reso Focusable=True la Grid che contiene il Datagrid e poi nell'evento click del menuitem ho inserite questo:
<Grid Height="384" Width="569" x:Name="Griglia" Focusable="True"> <Grid.RowDefinitions> <RowDefinition Height="242*" /> <RowDefinition Height="142*" /> </Grid.RowDefinitions> <Menu x:Name="Menu"> <MenuItem Header="Salva Dati" Click="Salva_Dati" /> </Menu> <DataGrid ItemsSource="{Binding Source={StaticResource tabellaViewSource}}" AutoGenerateColumns="False" EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected" Name="tabellaDataGrid" Margin="8,28,12,133" Grid.RowSpan="2">private void Salva_Dati(object sender, RoutedEventArgs e) { Griglia.Focus(); archivioDataSetTabellaTableAdapter.Update(archivioDataSet.Tabella); }
Secondo può andare??? -
martedì 3 luglio 2012 05:05
Ciao mana973,
You wrote on 02/07/2012 :
Ho inserito nelll'evento click del menuitem questa riga
private void Salva_Dati(object sender, RoutedEventArgs e) { tabellaDataGrid.CommitEdit(); archivioDataSetTabellaTableAdapter.Update(archivioDataSet.Tabella); }Ma se non mi sposto nella _textbox oppure nella riga sottostante_non aggiorna proprio niente...perchè?
perché CommitEdit sulla tabella e EndEdit sulla riga della griglia non sono la stessa cosa.
In fase di inizio dell'edit tieniti una reference alla riga corrente e in fase di salvataggio semplicemente chiami EndEdit su quella riga..n
blog @ //milestone.topics.it -
martedì 3 luglio 2012 10:30
La differenza è questa :
tabellaDataGrid.CommitEdit(); archivioDataSet.Tabella.Rows[tabellaDataGrid.SelectedIndex].EndEdit();
Tanto non funziona lo stesso cliccando da Menuitem...
Ho trovato la soluzione semplicemente, come hai anticipato prima tu, di spostare il Focus dal Datagrid al Grid che lo contiene, proprio così:
<Grid Height="384" Width="569" x:Name="Griglia" Focusable="True"> <Grid.RowDefinitions> <RowDefinition Height="242*" /> <RowDefinition Height="142*" /> </Grid.RowDefinitions> <Menu x:Name="Menu"> <MenuItem Header="Salva Dati" Click="Salva_Dati" /> </Menu> <DataGrid ItemsSource="{Binding Source={StaticResource tabellaViewSource}}" AutoGenerateColumns="False" EnableRowVirtualization="True" RowDetailsVisibilityMode="VisibleWhenSelected" Name="tabellaDataGrid" Margin="8,28,12,133" Grid.RowSpan="2">private void Salva_Dati(object sender, RoutedEventArgs e)
private void Salva_Dati(object sender, RoutedEventArgs e) { Griglia.Focus(); archivioDataSetTabellaTableAdapter.Update(archivioDataSet.Tabella); }
- Modificato mana973 martedì 3 luglio 2012 10:31
-
martedì 3 luglio 2012 13:53
Ciao mana973,
You wrote on 03/07/2012 :
tabellaDataGrid.CommitEdit(); archivioDataSet.Tabella.Rows[tabellaDataGrid.SelectedIndex].EndEdit();
Tanto non funziona lo stesso cliccando da Menuitem...
mi sa che non mi sono spiegato bene, non devi agire sulla tua DataTable i dati li non ci sono ancora, devi agire sulla DataGrid, una cosa del tipo:
DataGridRow row;
DataGridColumn column;private void OnDataGrid_BeginningEdit( object sender, DataGridBeginningEditEventArgs e )
{
this.row = e.Row;
this.column = e.Column;
}private void MenuItem_Click( object sender, RoutedEventArgs e )
{
if( this.column == null || this.row == null )
{
return;
}
var content = this.column.GetCellContent( this.row );
foreach( var be in content.BindingGroup.BindingExpressions.OfType<BindingExpression>() )
{
if( be.Status == BindingStatus.Active )
{
be.UpdateSource();
}
}
}.m
blog @ //milestone.topics.it- Contrassegnato come risposta mana973 mercoledì 4 luglio 2012 12:04
-
mercoledì 4 luglio 2012 12:07
Ciao Marco, avevo adottato la soluzione di spostare il focus perchè tutto funzionasse, e avevo scartato la soluzione che mi avevi prospettato in ultimo.
Ho adottato entrambi e funzionano tutte e due, aggiornando i dati del DataTable...
Grazie infinite!!!

