nienteposta
28-02-2013, 20:58
Buon giorno a tutti,
mi sono approciato da qualche settimana a WPF.
Ho scoperto con felicità il forte rinnovamento grafico e le potenzialità che ha rispetto alle form, ma ho grossi problemi con la DataGrid.
primo problema: l'evento MouseUp associato alla griglia mi crea problemi, ovvero quando clicco sulla riga che mi interessa, mi evidenzia la riga selezionata ma di fatto non mi fa scattare l'evento MouseUp!
Codice:
private void DataGridFarmaci_MouseUp_1(object sender, MouseButtonEventArgs e)
{
#region newVersion
IInputElement element = e.MouseDevice.DirectlyOver;
if (element != null && element is FrameworkElement)
{
if (((FrameworkElement)element).Parent is DataGridCell)
{
var grid = sender as DataGrid;
if (grid != null && grid.SelectedItems != null
&& grid.SelectedItems.Count == 1)
{
var rowView = grid.SelectedItem;
if (rowView != null )
{
//Faccio le mie operazioni qua dentro
}
}
}
}
#endregion
}
La stessa cosa accade con MouseDown, MouseDoubleClick ecc.. li ho provati tutti. Non è auomatico che, cliccato sulla riga (che si evidenzia) automaticamente io riesca ad entrare nel mio IF(rowView). A volte è nullo il valore rowView a volte non si scaturisce l'evento. come mai?
secondo problema:
Da una text Box scrivo il nome dell'ospite che voglio cercare nella griglia. La ricerca funziona, mi filtra perfettamente ciò che scrivo.
Codice:
private void TextBox_KeyUp_1(object sender, KeyEventArgs e)
{
////Evita di andare a interferire con il tasto cancella (backspace)
TextBox mio = sender as TextBox;
if (e.Key.ToString() == "Back" && mio.Text == "" )
DataGridOspiti.ItemsSource = from O in linqDb.ospites
where (O.sospeso == false) && (O.dimesso == false) && (O.deceduto == false)
select O;
if (e.Key.ToString() == "Back")
return;
//Autocompleta solo con almeno 3 caratteri
if (mio.Text.Length > 3) //Rivedere quale è il giusto comando per capire quanti caratteri ho digitato
{
//trova la lista di tutti i clienti con i loro indirizzi
//C'è un duplicato di ogni cliente per OGNI indirizzo)
var listaOspiti = from O in linqDb.ospites
where O.nome.StartsWith(mio.Text) || O.cognome.StartsWith(mio.Text)
select O;
//Se ho trovato qualcosa
if (listaOspiti.Count() > 0)
DataGridOspiti.ItemsSource = listaOspiti;
}
}
Il problema è che una volta filtrata la griglia, dove riassegno alla griglia la lista degli ospiti che risultano dalla griglia, se clicco su una riga qualsiasi della griglia non mi scatta l'evento MouseUp, o MouseDown Ecc..
perchè ?
mi sono approciato da qualche settimana a WPF.
Ho scoperto con felicità il forte rinnovamento grafico e le potenzialità che ha rispetto alle form, ma ho grossi problemi con la DataGrid.
primo problema: l'evento MouseUp associato alla griglia mi crea problemi, ovvero quando clicco sulla riga che mi interessa, mi evidenzia la riga selezionata ma di fatto non mi fa scattare l'evento MouseUp!
Codice:
private void DataGridFarmaci_MouseUp_1(object sender, MouseButtonEventArgs e)
{
#region newVersion
IInputElement element = e.MouseDevice.DirectlyOver;
if (element != null && element is FrameworkElement)
{
if (((FrameworkElement)element).Parent is DataGridCell)
{
var grid = sender as DataGrid;
if (grid != null && grid.SelectedItems != null
&& grid.SelectedItems.Count == 1)
{
var rowView = grid.SelectedItem;
if (rowView != null )
{
//Faccio le mie operazioni qua dentro
}
}
}
}
#endregion
}
La stessa cosa accade con MouseDown, MouseDoubleClick ecc.. li ho provati tutti. Non è auomatico che, cliccato sulla riga (che si evidenzia) automaticamente io riesca ad entrare nel mio IF(rowView). A volte è nullo il valore rowView a volte non si scaturisce l'evento. come mai?
secondo problema:
Da una text Box scrivo il nome dell'ospite che voglio cercare nella griglia. La ricerca funziona, mi filtra perfettamente ciò che scrivo.
Codice:
private void TextBox_KeyUp_1(object sender, KeyEventArgs e)
{
////Evita di andare a interferire con il tasto cancella (backspace)
TextBox mio = sender as TextBox;
if (e.Key.ToString() == "Back" && mio.Text == "" )
DataGridOspiti.ItemsSource = from O in linqDb.ospites
where (O.sospeso == false) && (O.dimesso == false) && (O.deceduto == false)
select O;
if (e.Key.ToString() == "Back")
return;
//Autocompleta solo con almeno 3 caratteri
if (mio.Text.Length > 3) //Rivedere quale è il giusto comando per capire quanti caratteri ho digitato
{
//trova la lista di tutti i clienti con i loro indirizzi
//C'è un duplicato di ogni cliente per OGNI indirizzo)
var listaOspiti = from O in linqDb.ospites
where O.nome.StartsWith(mio.Text) || O.cognome.StartsWith(mio.Text)
select O;
//Se ho trovato qualcosa
if (listaOspiti.Count() > 0)
DataGridOspiti.ItemsSource = listaOspiti;
}
}
Il problema è che una volta filtrata la griglia, dove riassegno alla griglia la lista degli ospiti che risultano dalla griglia, se clicco su una riga qualsiasi della griglia non mi scatta l'evento MouseUp, o MouseDown Ecc..
perchè ?