Thanks a lot. Foun other interesting filelds there as well, e.g. bus type.
(What I need the info for is to give a rough estimate of the expected time to complete a set of file operations before they are actually performed. Both disk technology and bus type are essential for getting good estimates.)
I want to display data in a DataGridView and I would like filter the shown rows during runtime. After a lot of googling I came to the conclusion that the best approach would be to place my data in a DataTable and then bind this to my DataGridView. I have done this and I read on e.g. DataView RowFilter Syntax [C#][^] that there are several pre-defined filters available. However, I want to write to my own filter delegate, that returns true or false depending on whether the row should be shown or not. Is this not possible to do?
How can I supply a delegate using any of those methods?
I guess a workaround would be to create a hidden column named ShowThisRow and run through it with a for-loop and set the value to either true or false and then apply the standard string expression filters on that column. But it doesn't feels like it's the right way to do it, there must be a better solution to this (probably using a different class than DataTable to hold the data).
When I was googling I came across this video Created by Camtasia Studio 3[^] and 6 minutes into to it the programmer adds a delegate that would fit my needs perfectly. But I guess I must have misunderstood something, I thought this was included directly in .NET without writing extra code.
I think it seems really great, but I don't seem to able to add rows after the DataGridView has been initialized. Nothing happened when I added an object to my source List<> and BindingListView does not have an Add-method. It has a AddNew-method, but that bring up a file browser dialog!?!?
You can pass in a row filter to the DataView constructor, but it has to be a string using the Expression Syntax[^]; you can't pass in a custom delegate.
The BindingSource has a Filter property[^], but again it's a string using the same syntax.
In WPF, you can supply a filter delegate to the ICollectionView. But that's not much help if you're using Windows Forms.
You could obviously select the filtered rows using LINQ, and even use the CopyToDataTable extension method to create a new DataTable from the filtered rows. But then you'd have to change the data source every time the filter changed, and you'd lose the connection to the original rows.
I don't think there's a good answer for this.
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
I want to display a number of files (=the path and file name) in a table (DataGridView or similar). However, I do not have all the files in a single List (or array), instead I have a List of ParentClass objects that each contains a list of ChildClass objects and then finally each ChildClass object contains a List of files. Can I show these files in a table, preferrably using BindingSource, or it is impossible since not all the files are not in a single List?
It's not impossible, but a single control only has one BindingSource, so you can't just "set it and go" - you will have to create your table manually, and add each row yourself. You can then use the table as a BindingSource to display it all together.
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
AntiTwitter: @DalekDave is now a follower!
What are the benefits of using BindingSource to display the data? Would it, for example, enable me to use the filter functionality of BindingSource? Does this approach mean I basically first construct an array with all the files and then bind that array to the table? If so, how can I go from a cell (row number and column number) to the parent and child objects?
I plan so show more in the table than just the file name and path, I just simplified the scenario to cut to the core of the problem. So, I don't think I can solely use a tree, I haven't seen one that supports several columns. I think the best approach would be a blend of a table and a tree, so that I could by default collapse rows that don't require immediate attention of the user.
public string myString;
Further, let's assume I have a List of this class:
public List<MyClass> myList;
I would like to display all the myString and myInt in a DataGridView with 2 columns, but I would also like to implement a filter that would restrict what would be shown in the DataGridView. For example, one filter would be to only show myInt values between 0 and 5, but please note that I don't what to alter the List itself, it contains "master data" that should never be thrown out or modified. What would be the best approach to achieve this? I would prefer to do this in .NET 2.0, unless there are major reasons to switching to something newer.