|
You can't concatenate DataGridViewColumn objects. The Sort method only takes a single DataGridViewColumn object, or a class that implements the IComparer interface.
Here's an example on using IComparer from MSDN Library:
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) _
Handles Button1.Click
If RadioButton1.Checked = True Then
DataGridView1.Sort(New RowComparer(SortOrder.Ascending))
ElseIf RadioButton2.Checked = True Then
DataGridView1.Sort(New RowComparer(SortOrder.Descending))
End If
End Sub
Private Class RowComparer
Implements System.Collections.IComparer
Private sortOrderModifier As Integer = 1
Public Sub New(ByVal sortOrder As SortOrder)
If sortOrder = sortOrder.Descending Then
sortOrderModifier = -1
ElseIf sortOrder = sortOrder.Ascending Then
sortOrderModifier = 1
End If
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements System.Collections.IComparer.Compare
Dim DataGridViewRow1 As DataGridViewRow = CType(x, DataGridViewRow)
Dim DataGridViewRow2 As DataGridViewRow = CType(y, DataGridViewRow)
' Try to sort based on the Last Name column.
Dim CompareResult As Integer = System.String.Compare( _
DataGridViewRow1.Cells(1).Value.ToString(), _
DataGridViewRow2.Cells(1).Value.ToString())
' If the Last Names are equal, sort based on the First Name.
If CompareResult = 0 Then
CompareResult = System.String.Compare( _
DataGridViewRow1.Cells(0).Value.ToString(), _
DataGridViewRow2.Cells(0).Value.ToString())
End If
Return CompareResult * sortOrderModifier
End Function
End Class
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
Thanks but I don't understand how it is related to my problem.
I have in my db:
MAINBOX | SUBBOX | 1 | 0001 | 1 | 0002 | 2 | 0001 | 2 | 0002 | 2 | 0003 |
...
I am displaying those 2 fields in datagridview. I would like to display them as described above -> First Sort by Main Box and then by Sub Box.
Please help,
Thanks
Shay Noy
|
|
|
|
|
shaynoy wrote: Thanks but I don't understand how it is related to my problem.
You showed how you tried to use the Sort method, and I showed you what to do to accomplish that.
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
I understand but what I need is to know if I can sort 2 columns as I showed before. Is it possible?
Thanks
Shay Noy
|
|
|
|
|
shaynoy wrote: I understand but what I need is to know if I can sort 2 columns as I showed before. Is it possible?
No, that is not possible. I already explained in the first reply that you can't concatenate DataGridViewColumn objects. You have to use an IComparer to sort on more than one column.
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
ubderstood, thanks
Shay Noy
|
|
|
|
|
Dear Gents,
I have a text file call Imp.text containing the following contents in the same order
x1, x2, x3, x4
y1, y2, y3, y4
z1, z2, z3, z4
and I have 4 text boxes in a windows form.
My objective is I need to bind x1 into first text box, x2 into second text box, x3 into third text box etc.
When i press button named as next, it should display second row in the corresponding text boxes.. y1--> 1st textbox, y2---> 2nd text box etc..
I have written following coding but its always displaying the the last row only.
Dim i As Integer
Dim fields() As String
Dim filename As String = "C:\Inv\Imp.txt"
Dim delimiter As String = ","
Using parser As New FileIO.TextFieldParser(filename)
parser.SetDelimiters(delimiter)
While Not parser.EndOfData
For i = 0 To parser.EndOfData
fields = parser.ReadFields()
itemcode.Text = fields(0)
secondcode.Text = fields(1)
itemname.Text = fields(2)
category.Text = fields(3)
Next
End While
End Using
Pls correct me If I am wrong
Regards
Azeem
|
|
|
|
|
Ahamed Azeem wrote: "C:\Inv\Imp.txt"
Hard coding paths is a bad idea
I didn't know there was a textfieldparser class.
Ahamed Azeem wrote: While Not parser.EndOfData
For i = 0 To parser.EndOfData
Isn't this redundant ?
It seems to me that if your code works at all, it reads all three lines, and so ends up setting the fields three times before you'd even notice, leaving you with the last fields. Get rid of the while and the loop, and just read the fields once, and you'll get the first line, I reckon.
Christian Graus - Microsoft MVP - C++
"also I don't think "TranslateOneToTwoBillion OneHundredAndFortySevenMillion FourHundredAndEightyThreeThousand SixHundredAndFortySeven()" is a very good choice for a function name" - SpacixOne ( offering help to someone who really needed it ) ( spaces added for the benefit of people running at < 1280x1024 )
|
|
|
|
|
Hi guys,
In my windows form application, a user can store Items in a listbox. Each item is compiled from 4 textboxes. When the user clicks on another item, I need the contents of Item in the listbox to split and display in the textboxes.
Currently I am trying to use an arraylist. However, it think i need more than just an arraylist. I hope you are able to help.
Cheers.
|
|
|
|
|
this can be good solution:
you can specify new class that has 4 property for your 4 specifications
now you can get collection of Array list based on your class define above,
and at last you have an arryalist that have items corresponds with your special class.
i think you can implement this yourself but for implement details post here again.
Human knowlege belongs to the world
|
|
|
|
|
Hi, Thank you so much for the reply. I have done as you said. I have a class file which has 4 private variables declared, and then I have 4 properties for each.
The property code for each looks like this:
Public Property Artist() As String
Get
Return strArtist
End Get
Set(ByVal Value As String)
strArtist = Value
End Set
End Property
These are the steps I have taken:
In the Main form,
OnButtonClick
- Dim obj As New cls
- obj.Variable1 = Me.Textbox1.Text
- obj.Variable2 = Me.Textbox2.Text
- obj.Variable3 = Me.Textbox3.Text
- obj.Variable4 = Me.Textbox4.Text
- arrList.Add(obj) ???? Is this correct?
- Me.Listbox1.Items.Add(Textboxe1/2/3/4.Text)
THEN,
OnListBoxSelectIndexChanged
- I need to retrieve the values from the arraylist which at this point holds the class instance
- Then I need to put the data back into the original Textboxes. This is the part I am stuck at
Thanks in advance
|
|
|
|
|
Kindly assist me rectify VB 6.0 code below:
Shell("xcopy c:\Software\Zimbabwe c:\Program Files\Zimbabwe.* /-Y")
I want to copy the folder called Zimbabwe to Program Files but nothing seems to be happening.
|
|
|
|
|
i believe the problem is that shell assumes you know the location of xcopy. so by not specifying a path for xcopy it's looking at the local directory instead of c:\windows\system32, so put the path in for xcopy
'Never argue with an idiot; they'll drag you down to their level and beat you with experience.' ~ anonymous
|
|
|
|
|
The XCOPY command should be:
XCOPY C:\Software\Zimbabwe\*.* C:\Program Files\Zimbabwe\*.* /Y
|
|
|
|
|
Dave Kreskowiak wrote: XCOPY C:\Software\Zimbabwe\*.* C:\Program Files\Zimbabwe\*.* /Y
I tried this but still the results are negative. When I try this same command from the DOS prompt I get an error message that says: Invalid number of parameters. I think the problem could be on the spacing of the folder name Program Files but then how can this be rectified? Pease assist.
|
|
|
|
|
Whoops. Any path names with spaces in them should have quote marks around them.
XCOPY C:\Software\Zimbabwe\*.* "C:\Program Files\Zimbabwe\*.*" /Y
|
|
|
|
|
Hi..
ive read multiple articles through multiple location in google and somewhat understand what threading can do.. however..
how do i decide where and when my app will need it ???
for example.. the only place i can think of where my app will do heavy work is producing reports through dlgprintpreview.etc is that something i need to consider using threading for ..
any advice would be much appreciated.
Regards
Robbo
|
|
|
|
|
Simply put, if you are waiting for more than one thing to happen, you use threading.
If you both want to wait for a process to finish, and wait for user input at the same time, you use a background thread for the process. If you run the process in the main thread, the program will not respond to any user input at all until the process is finished.
Experience is the sum of all the mistakes you have done.
|
|
|
|
|
Hi,
multi-threading is all about performance; there are two reasons to add some threads
(although these reasons often converge):
1. overall behavior
to increase parallellism: you want several things to go on at the same time, without
one affecting the other more than necessary (they inherently interfere with each other
because of limited resources, such as CPU cycles or memory bandwidth).
So you add threads to decouple logically distinct activities.
Example: one thread can do a database access, another an Internet fetch, yet another
a complex computation. It would not make much sense to let the database activity wait
on an unrelated Internet reply or an unrelated computation.
The most obvious wish for parallellism is in the GUI: you want to be able to
move, resize, close, ... your form(s) at all times, don't you? Therefore an interactive
application should reserve one thread (normally the main thread, also called GUI thread)
for dealing with the GUI, the windows messages, etc; all actual operations (database,
betwork, calculations) should be delegated to threads.
2. fastest execution
to improve performance: if you want a process to be completed as soon as possible,
then it does not make sense to have system resources (CPU power, bus bandwidth, ...)
less active than they could be, i.e. you want to have maximum chance of code being ready
for execution. Having only one thread to execute all code often is not the right way then.
With this in mind you might consider adding threads to execute identical jobs, each handling
part of the data. For performance reasons this typically does not help beyond a few threads,
since they would compete with each other for system resources (there is only so much a disk
or a network can offer). If the actual bottleneck is CPU power, then I would recommend
not to exceed 2*Environment.ProcessorCount
Final comments:
1.
multi-threading always needs thread synchronization and/or interthread communication;
you can not just have a number of threads working on shared data without protecting the
data from becoming inconsistent; the Thread class, as well as mutexes, locks, and the like
will support this.
2.
the GUI Controls are not thread-safe; Windows requires that a Control only be accessed
by the thread that created it (normally the GUI thread for all of them, since they typically
are all linked in one big hierarchy). When other threads need to report and show some
results using the GUI, there is an Invoke mechanism, supported by Control.InvokeRequired
and the methods Control.Invoke() or BeginInvoke() methods.
3.
threads are either foreground or background; all foreground threads must finish before
your app can exit. As a result it often is best to use background threads for things
that should go on in the background and not prevent an app from exiting.
|
|
|
|
|
Thanks for the great detail and time you took to reply to this.
the one that im interested in looking more into is
The part you wrote here
the GUI Controls are not thread-safe; Windows requires that a Control only be accessed
by the thread that created it (normally the GUI thread for all of them, since they typically
are all linked in one big hierarchy). When other threads need to report and show some
results using the GUI, there is an Invoke mechanism, supported by Control.InvokeRequired
and the methods Control.Invoke() or BeginInvoke() methods.
any quick examples to look at , at all Luc ..
kind regards
Robbo
|
|
|
|
|
vbbeg wrote: any quick examples to look at
Hi,
the world is full of examples, just search InvokeRequired on CP or Google site.
I even have an example in my Sokoban article, see the last code snippet in the article's
text (it is C# code but the mechanism itself is language independent).
|
|
|
|
|
I am using vb.net 1.1 for desktop application.
While displaying contents of a datatable / dataview in a datagrid, I wish to suppress some columns (foreign keys, few admin fields) which user is not concerned with.
how do I do it?
thanks,
Madhav
|
|
|
|
|
If you are using visual basic 2003 then you can use the following statement
I think the styanx for hidding a column is like this.
datatable.columns(0).columnmapping = Hidden
|
|
|
|
|
Hello,
Thanks for indicating the way. Actual code is
tblMaster.Columns("Id").ColumnMapping = MappingType.Hidden
tblMaster.Columns("IsBillable").ColumnMapping = MappingType.Hidden
where "tblMaster" is datatable, it does work and seems to be correct way of doing this.
Now I am trying to see how the hidden columns will be updated when foreign key values change due to change in name/description of foreign key or when a new record is added.
I will post the concerned code when I check it thoroughly.
thanks once again.
thanks,
Madhav
|
|
|
|
|
infotools wrote: While displaying contents of a datatable / dataview in a datagrid, I wish to suppress some columns (foreign keys, few admin fields) which user is not concerned with.
You could build a query and only select the columns that you want to display using that query, before you bind the datatable to the grid, i.e:
SELECT column1, column2, ... FROM [tableName] WHERE ...
Pete Soheil
DigiOz Multimedia
http://www.digioz.com
|
|
|
|