Ik wil op een makkelijke manier de control die op dit moment focus heeft verkrijgen. Ik weet dat het kan door alle controls bij langs te lopen en de focus op te vragen, maar dit is behoorlijk veel en vervelend werk. Nou vroeg ik mij af of het mogelijk is om dit op een andere manier te doen.
In Delphi heeft een form een ActiveControl property. Ik gok erop dat er in .NET ook wel zo'n property is.
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney
Sterker zelfs, in .NET heeft die property dezelfde naam.
https://fgheysels.github.io/
ai dat is jammer, heeft iemand misschien een idee hoe ik het volgende makkelijk voor elkaar kan krijgen?
probleem :
Ik heb een applicatie gemaakt die uit meerdere schermen bestaat (tabs). Op elk van die schermen zijn controls gekoppeld aan een DataSet of DataView (met databinding). Nou heb ik bij elke control het volgende gedaan, bij focus enter zeg ik:
((DataRowView)this.GetBindingManager().Current).BeginEdit();
en bij focus leave:
((DataRowView)this.GetBindingManager().Current).EndEdit();
Nou zou het mooi zijn als een control ook de focus verloor als een gebruiker een save knop op de toolbar of het save item in een menu aanklikt, maar dit gebeurd dus niet. Ik moet eigenlijk een simpele manier hebben om op de dataset EndEdit() uit te voeren. Heeft iemand een idee, dat zou mij namelijk een hoop saai programmeerwerk besparen.
Ik zou ook voor elke table zijn rows in de dataset gewoon endEdit aan kunnen roepen maar ik weet niet wat het effect is als ik endEdit aanroep zonder daarvoor beginEdit().
probleem :
Ik heb een applicatie gemaakt die uit meerdere schermen bestaat (tabs). Op elk van die schermen zijn controls gekoppeld aan een DataSet of DataView (met databinding). Nou heb ik bij elke control het volgende gedaan, bij focus enter zeg ik:
((DataRowView)this.GetBindingManager().Current).BeginEdit();
en bij focus leave:
((DataRowView)this.GetBindingManager().Current).EndEdit();
Nou zou het mooi zijn als een control ook de focus verloor als een gebruiker een save knop op de toolbar of het save item in een menu aanklikt, maar dit gebeurd dus niet. Ik moet eigenlijk een simpele manier hebben om op de dataset EndEdit() uit te voeren. Heeft iemand een idee, dat zou mij namelijk een hoop saai programmeerwerk besparen.
Ik zou ook voor elke table zijn rows in de dataset gewoon endEdit aan kunnen roepen maar ik weet niet wat het effect is als ik endEdit aanroep zonder daarvoor beginEdit().
[ Voor 10% gewijzigd door Verwijderd op 02-08-2004 14:36 ]
Verwijderd
Ik weet de syntax niet precies, maar zoiets:
code:
1
2
3
| if (isinstance(ThisForm.ActiveControl, DataView)) {
((DataRowView)((DataView)ThisForm.ActiveControl).GetBindingManager().Current).EndEdit();
} |
[ Voor 3% gewijzigd door Verwijderd op 02-08-2004 14:45 ]
Ik begrijp dat je een datagrid wil saven, maar daarvoor eerst uit edit mode vandaan moet toch ?
Met een infragistics grid is het:
Dus dan zal het wel zoiets worden:
Met een infragistics grid is het:
code:
1
2
3
4
5
6
7
8
9
| Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
UltraGrid1.ActiveRow = Nothing
UltraGrid1.PerformAction(Infragistics.Win.UltraWinGrid.UltraGridAction.ExitEditMode)
UltraGrid1.UpdateData()
Dim build As New SqlClient.SqlCommandBuilder(mycommand)
mycommand.Update(mydataset, "t_medewerkers")
bindgrid()
End Sub |
Dus dan zal het wel zoiets worden:
code:
1
2
3
4
5
6
7
| Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
datagrid1.endedit
datagrid1.updatedata()
End Sub |
The best thing about UDP jokes is that I don't care if you get them or not.
Het probleem is dat ik niet weet welke control de focus heeft en dus ook niet weet op welke row ik EndEdit() aan moet roepen. Maar ik doe het wel op de niet slimme manier, namelijk voor elke tab bij langs gaan of een control de focus heeft, als dit zo is, dan op de BindingManager.Current EndEdit aanroepen.
De BindingManager weet welke Row er de focus heeft. Een CurrencyManager heeft nl. een Position property, en die property geeft aan welke row (index) er de actieve row is.
https://fgheysels.github.io/
Je kan sowieso toch een endedit op al je grids geven in je tabbladen ?
Dan hang je dit achter je "Opslaan" knopje.
Dan hang je dit achter je "Opslaan" knopje.
The best thing about UDP jokes is that I don't care if you get them or not.
Maar geeft dit geen problemen als je geen beginEdit hebt opgegeven.Remc0 schreef op 02 augustus 2004 @ 16:16:
Je kan sowieso toch een endedit op al je grids geven in je tabbladen ?
Dan hang je dit achter je "Opslaan" knopje.
Ik zou zeggen, probeer het.
The best thing about UDP jokes is that I don't care if you get them or not.
Verwijderd
Het hangt er een beetje van af. Als het component goed geschreven is, mag er in elk geval niks kapot gaan.
Je hebt dan twee kansen: òf het component laat het stilletjes gebeuren, of het gooit een exception. In het eerste geval ben je klaar, en in het tweede kun je de exception afvangen.
Je hebt dan twee kansen: òf het component laat het stilletjes gebeuren, of het gooit een exception. In het eerste geval ben je klaar, en in het tweede kun je de exception afvangen.
BeginEdit wordt -dacht ik- impliciet opgeroepen als je iets gaat veranderen in een cel.Verwijderd schreef op 02 augustus 2004 @ 16:35:
[...]
Maar geeft dit geen problemen als je geen beginEdit hebt opgegeven.
https://fgheysels.github.io/
Dat klopt idd, maar ik ga nu op elke data row die current is in een scherm een endEdit doen zonder dat je zeker weet dat daarvoor een beginEdit is aangeroepen of misschien is er al een keer een beginEdit en een endEdit aangeroepen.whoami schreef op 02 augustus 2004 @ 18:00:
[...]
BeginEdit wordt -dacht ik- impliciet opgeroepen als je iets gaat veranderen in een cel.
Ik kwam dit tegen:
code:
1
2
3
4
5
6
| Host: Scott (Microsoft) Q: I've seen many people having problems getting the pending changes into the data source of a bound grid. I recommended a grid.EndEdit( null, rowNum, false ), followed by a CurrencyManager.EndCurrentEdit(). Is this ok, or is there a better method? A: That's the way to do it. |
The best thing about UDP jokes is that I don't care if you get them or not.
Een endEdit op de datasource die gebonden is aan een control werkt niet als die control focus houdt. Ik heb de dataGrid.EndEdit nog niet geprobeerd, maar bij TextBoxes etc... werkt dit niet.Remc0 schreef op 02 augustus 2004 @ 20:01:
Ik kwam dit tegen:
code:
1 2 3 4 5 6 Host: Scott (Microsoft) Q: I've seen many people having problems getting the pending changes into the data source of a bound grid. I recommended a grid.EndEdit( null, rowNum, false ), followed by a CurrencyManager.EndCurrentEdit(). Is this ok, or is there a better method? A: That's the way to do it.
Ik heb het geprobeerd met een datagrid, zoals je voorstelde. Maar dit werkt dus niet, de waarde van de huidige cell die geedit is wordt niet opgeslagen.
code :
code:
1
2
3
4
5
6
7
8
9
10
| public void EndEdit()
{
if((this.telefoonNummersDataGrid.CurrentRowIndex > 0) && (this.telefoonNummersDataGrid.CurrentCell.ColumnNumber > 0))
{
DataGridColumnStyle dgc = this.telefoonNummersDataGrid.TableStyles[0].GridColumnStyles[0];
this.telefoonNummersDataGrid.EndEdit( dgc, this.telefoonNummersDataGrid.CurrentRowIndex, false );
CurrencyManager cm = (CurrencyManager)this.BindingContext[this.dataView];
cm.EndCurrentEdit();
}
} |
[ Voor 34% gewijzigd door Verwijderd op 03-08-2004 13:16 ]
Pagina: 1