FAQ (for v2 release candidate)

Q) Can I use DataView/DataTable as ItemsDataSource?
A) For zillionth time... YES!!!!
But... unless someone fixes Mono DataView/Table events bugdo not expect to get predictable handling. Basically, events are only executed properly on MS.Net, while Mono way of handling events is best described as unpredictable and random. I personally don't use neither DataTable nor DataView objects which means that this bug is outside of my domain and the person fixing it is not gonna be me. (I use mostly ObservableList+ObservableFilterListView+ObservableSortListView or its generic variations, they provide way more speed and easier handling)

Both classes have specialized QueryModel assigned and this query model is already prepared for the time when someone fixes specified bug. Query model even handles deleted but not applied rows and can show them striked or set them as invisible.

There is also DbObservableList wrapper for DataView or DataTable class if one rather uses ObservableList approach. More on that in lessons which are bound to be written as soon as 2.0 hits release.

For additional information... if you don't need to handle changes automatically, then bindings will work for you just as you need. But if you want live updates, Query Model won't work as it should and neither will any other solution on Mono. DataTable/DataView events are utterly broken, not the solutions which provide data.

And same goes for DataRow. DataRow is perfectly supported in DataBindings.

Q) Does this work with MS.Net?
A) Yes. One bug has just shown recently on MS.Net while application is quiting, but this will be fixed before 2.0. Mono for Windows on the other hand works perfectly.

In fact I don't have Windows machine. But 99% of my customers/users is Windows exclusive. My commercial applications are simply compiled on Linux and copied to Windows machine. The first test on Windows my applications get is actual deployment on customers computers. And it is quite a while since I stopped doubting there might come to any problem. From other users of my library I got exactly the same results.

Q) Why 3.5 profile?
A) Monodevelop... And it took me quite a while to figure this out.

As soon as my applications reached certain number of forms with custom widgets, monodevelop 2.0 simply froze on building gui unless I used 3.5 profile. Haven't tested this for quite a while, so I don't know if this is still relevant or not. Otherwise, 2.0 is the lowest profile as I use extension methods and generics.

Q) Your library uses parts which are not covered by "Microsoft community promise"
A) I know. I would already do the separation, but I can't find good and simple documentation what is to be done. Separation is THE only feature of 2.1 release.

Like first... System.Data.Bindings has nothing common with System.Data, it is just most sensible namespace for this assembly. The only problematic parts are few classes which interact with System.Data (DataTable. DataView query model and DbObservableList)

If you don't use System.Data, then you don't use anything which would be problematic. You will simply update SDB to 2.1 and that is it. But, if you use them? All it will take from you is one line and everything will work just like it is working now in one assembly.

NonFreeCode.RegisterSystemData();

and that is it, nothing else, nothing more.

And just few little bits of project history. I'm almost fanatical about FOSS, and support for System.Data was never in my plans... But... zillion questions about DataTable/DataView support had persuaded me to implement it, because I simply got fed up being asked same question again and again. And the fact that everything was questionable at that time anyway. Now that situation is clearing out... solutions can be applied.

Q) Where is version 1?
A) To answer it bluntly. There is no version 1 and there is never gonna be one. 0.98.4 is the last version of that branch. I never had the guts to call it final release as I was well aware how broken list adaptors were. That was one of my biggest mistakes I ever made. I missed the post where GInterface introduction in gtk-sharp was announced.

Version 1 uses synchronization between generic model and observable lists. But since these two are completely different methods it often led to unsyncing of those two. Syncing data into TreeModel and draw operation were way to expensive for SDB and so lists often fell out of sync. Well, to be truthfull, if one just knew which buttons to push and how to maintain it, lists were stable, but that was never good enough solution for me to be able to call it final.

In the meantime I introduced so many additions that calling that version 1.0 would be completely unfair. And this is why 1.0 will never exist.

Q) Where are validators?
A) Validators exist, but additional validator in form I decided on is part of final 2.0 (currently still sitting in my scratch release). Validators here are already present. Every widget has GetUserData and SetUserData event handlers and there is a place where validators should reside if needed.

Validators should either reside in data class/property/set {}, widgets SetUserData event or IValidatable interface. But, the only widgets that will actually bind to IValidatable are buttons and a new widget I'm introducing now. Basically, I decided on less annoying and more intuitive approach.

My approach:
IValidatable == false/true decides whether button is disabled or enabled. Result is based on the condition specified in data class. One of the most unintuitive things in my eyes is enabling user to press Ok, use message box to report error and returning him to the edit part. If data is not correct, then user should not be able to press Ok, but rather something like "What is wrong with my data?". But that is my opinion. And "What is wrong with my data" is currently residing on my scratch version until I find nicest cross platform notification approach.

And to be more explanatory:
Rather than making validators for imperfect widgets like Masked entry... Focus on making perfect widget where entering anything wrong is impossible and do that without annoying user about every little thing. User just wants to enter data as fast as possible.

Q) Why do widgets disappear when I drop them on form in monodevelop?
A) This is how stetic works/or doesn't, everything is in the eye of the beholder. At least, this is how stetic works unless you use my patch.
More on this here and here. And patch for monodevelop here.

Please don't report this bug to me unless it is patch related and even that only against stable monodevelop version.

Q) I get compile error on EmitRowsReordered
A) That is gtk-sharp fault. And it is based as a result of badly introduced API correction.

Until gtk-sharp-2.12.9 method was declared as EmitRowsReordered(TreePath, TreeIter) : int which was wrong.  But instead of providing empty method tagged with Obsolete attribute or something like that for pure compatibility reasons, they simply changed API which contributes to breakage of running assembly as well as compilation.

Q) You have a memory leak which is eating my ram with insane speed
A) Nope. You just need to have patched Gtk-sharp. Gtk-sharp-2.12.9 and prior are leaking memory as said in this bug report Mostly I was simply round tripping, profiling my library and placing blame on gtk-sharp. But all gtk-sharp examples worked as they should...? so I went back to profile my library. And done that until I finally started . Fix provided there doesn't solve all leaks I noticed, but preventive measures for all others are taken in Gtk.DataBindings. Memory usage is rock stable if not for anything other, then simply because of the fact that I lost 2 weeks on profiling to find mentioned bug.to look into profiling result differences of gtk sample and my sample.

Consolation prize for me was getting really, really profiled assembly.

Providing demos for other leaks I found is one of the future quests when time allows.

Q) God, you suck as web designer
A) Yes, and I'm proud of that fact. Although with my lack of html knowledge... stop insulting other web developers and please don't mention designer part. I barely scrap page like this one in html. Designing it is well beyond my scope of html knowledge.