|
The code below is what I am using to provide Find functionality (including Match Case or Match Exact options) on a datagrid.
In it you will see how it iterates all rows and columns and reads the cell values to allow the compare etc. Think it shows you everything you need;
Private Sub searchForm_FindNext(ByVal SearchText As String, ByVal MatchCase As Boolean, ByVal MatchExact As Boolean) Handles searchForm.FindNext
If (DataResults.RowCount > 0) AndAlso (SearchText.Length > 0) Then
Dim offset As Integer = 1
Dim rowIndex As Integer
If DataResults.CurrentRow.Index = DataResults.Rows.Count - 1 Then
If MessageBox.Show("You are on the last row, go back to the start?", "Find In Results", MessageBoxButtons.YesNo) = vbYes Then
DataResults.Rows.Item(0).Selected = True
BindingNavigatorMoveFirstItem.PerformClick()
offset = 0
Else
Exit Sub
End If
End If
For rowIndex = DataResults.CurrentRow.Index + offset To DataResults.Rows.Count - 1
For Each cell As DataGridViewCell In DataResults.Rows.Item(rowIndex).Cells
If cell.ValueType.Equals(GetType(String)) Then
If MatchCase AndAlso MatchExact Then
If cell.Value.ToString.Equals(SearchText) Then
FindNextMatched(rowIndex)
Exit Sub
End If
ElseIf MatchCase Then
If cell.Value.ToString.Contains(SearchText) Then
FindNextMatched(rowIndex)
Exit Sub
End If
ElseIf MatchExact Then
If cell.Value.ToString.ToUpper.Equals(SearchText.ToUpper) Then
FindNextMatched(rowIndex)
Exit Sub
End If
Else
If cell.Value.ToString.ToUpper.Contains(SearchText.ToUpper) Then
FindNextMatched(rowIndex)
Exit Sub
End If
End If
End If
Next
If rowIndex = DataResults.Rows.Count - 1 Then
If MessageBox.Show("End of results reached, do you want to search from the start again?", "End of Results Reached", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
rowIndex = 0
End If
End If
Next
End If
End Sub
Hope that helps!
|
|
|
|
|
That code is no dought very good but if you or any one else has ever used in the past with vb 6.0 sheridan grid then definately you will understand what i want to do here.
I simply want to extract the cell value and use it for displaying data on the other form. I have learn one different approach very new to me. However i am still looking if some one is able to extract either the value of the cell or its index number.
You are close but not enough close.
If i explain to you what i am developing may be u understand it better.
I have a main form say a Product form. This form has a search button to search the products i call it list because it displays a list but on the top of this form there is a search textbox which helps in searching the product code wise. for example
0010209
Here 001 is the code for lets say the main product 02 is the code for its type 09 is the colour and so on and so forth.
(the above portion i hav completed successfully but this is what still remaing in the end
when donot want to search from the form and you want to select from the grid and when you click on the grid the specific code displayed on the grid should be passed to a variable.
this is all i want if any one can help me please.
modified on Saturday, June 26, 2010 12:46 PM
|
|
|
|
|
Ah, Well there lies a problem, the code above is .Net not VB6, you should have stated this in your original post.
Good luck, i'm not going backwards to VB6 anymore.........
|
|
|
|
|
You donot need to go back to vb 6.0 technology, i am developing in vb.net 2008, its an update of an application from vb 6.0 to vb.net 2008 with different functionalities.
just follow the idea only.
Regards
Mirza
|
|
|
|
|
ok, catch your drift, the user clicks a cell in the grid and it is passed to a control e.g. a text box?
|
|
|
|
|
The example code below will create an internal data object to bind some test data to a datagridview, and then allow the user to click a cell and transfer the cells value to a textbox.
The DataGridView is named DataGridView1 TheDGV and the textbox is named TextBox1
Public Class Form1
Private _ProductList As List(Of Product) = New List(Of Product)
Private Class Products
Private _ProductList As List(Of Product)
Public Sub AddProduct(ByVal NewProduct As Product)
_ProductList.Add(NewProduct)
End Sub
End Class
Private Class Product
Private _ProductID As String
Private _Price As Double
Public Sub New(ByVal ProductID As String, ByVal Price As Double)
_ProductID = ProductID
_Price = Price
End Sub
Public ReadOnly Property ProductID() As String
Get
Return _ProductID
End Get
End Property
Public ReadOnly Property Price() As Double
Get
Return _Price
End Get
End Property
End Class
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
_ProductList.Add(New Product("Product1", 100))
_ProductList.Add(New Product("Product2", 200))
_ProductList.Add(New Product("Product3", 300))
_ProductList.Add(New Product("Product4", 400))
_ProductList.Add(New Product("Product5", 500))
TheDGV.DataSource = _ProductList
End Sub
Private Sub TheDGV_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles TheDGV.CellClick
TextBox1.Text = TheDGV.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString()
End Sub
Private Sub TheDGV_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles TheDGV.CellContentClick
TextBox1.Text = TheDGV.Rows(e.RowIndex).Cells(e.ColumnIndex).Value.ToString()
End Sub
End Class
[Edit: I had the wrong name of the DataGridView]
Dave
Don't forget to rate messages!Find Me On: Web| Facebook| Twitter| LinkedInWaving? dave.m.auld[at]googlewave.com
modified on Sunday, June 27, 2010 2:38 AM
|
|
|
|
|
Great job, that is really great code, i have been looking for something of this type for long time, thanks
|
|
|
|
|
the followind code is used for search items from a column cell
For Each row As Windows.Forms.DataGridViewRow In Me.DataGridView1.Rows()
Dim id as integer
id = row.cell(0).value
cmd.Parameters.Add("@id", SqlDbType.int).Value = id
next row
when i enter a value in the Column cell(0) on first row works fine but the problem is when i enter a value in second,third ... row it doesn't work as it should be.
can anyone help me to find out what i am missing ?
thanks !!!
so much of happy ending...
|
|
|
|
|
For v = 0 To DataGridView1.Rows.Count - 1
id = DataGridView1.Rows(v).Cells(0).value
'Do your thing'
Next v
|
|
|
|
|
i used ur code working same as mine, only first row cell it works not for rest !
what i am missing ?
thanks for your reply any more ideas ?
so much of happy ending...
|
|
|
|
|
Describe exactly what you want to do after you've got the cells value
in your 'id'-variable.
|
|
|
|
|
@Scubapro
i need to search data inside datagridview only , when user enter an id number in the id column in every row which should display its details .
the code is working fine but not with other rows.
i hope u understand this.
thanks.
so much of happy ending...
|
|
|
|
|
zafax_ wrote: the code is working fine
Then there is no problem?
Regards
David R
---------------------------------------------------------------
"Every program eventually becomes rococo, and then rubble." - Alan Perlis
The only valid measurement of code quality: WTFs/minute.
|
|
|
|
|
You want similar behaviour on the second column? What's the name and datatype of the second column?
I are Troll
|
|
|
|
|
@Eddy Vluggen,
see the following ...
Column name is id.
user enters id number on this column. for retrieving details .
For Each row As Windows.Forms.DataGridViewRow In Me.DataGridView1.Rows()
Dim id as integer
id = row.cell(0).value
cmd.Parameters.Add("@id", SqlDbType.int).Value = id
next row
id | name | address |age
1 | abcd | abcd |abcd
2 | 123 | rr | fr
it works only on first row cell.
thanks
so much of happy ending...
|
|
|
|
|
..and you want the same functionality in the second row cell? Something like this?
For Each row As Windows.Forms.DataGridViewRow In Me.DataGridView1.Rows()
Dim searchVal as String
searchVal = row.cell(1).value
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = searchVal
next row
That would be flawed too, since you'd still be adding a lot of SqlParameter objects to the command. Can you post the entire method, including the parts where you create and execute the SqlCommand ?
I are Troll
|
|
|
|
|
items search through storedprocedure
the entire code here...
Private Sub getItems()
c.ConS()
c.Cm.Open()
For Each row As DataGridViewRow In Me.ItemsDataGridView.Rows
Dim cod As Integer
cod = row.Cells(0).Value
Dim cmd As New SqlCommand("getItems", c.Cm)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@cod", int).Value = cod
Dim da As New SqlDataAdapter
da.SelectCommand = cmd
da.Fill(dat)
Me.bind.DataSource = dat
Me.ItemsDataGridView.DataSource = bind
Next row
End Sub
so much of happy ending...
|
|
|
|
|
If I understood correctly then you want to use this code to (also) filter on the "name" column? Can you post the source of the stored procedure "getItems"?
I are Troll
|
|
|
|
|
getitems()is the query which retrieves data
i need to filter cod in id column .
i dont know y u want see the code for stored procedure since its just a query
......
select id ,A,B,C from Items where Code =@cod
so much of happy ending...
|
|
|
|
|
Its not clear what you are trying to do, but the code you are using will only iterate each row, if you are trying to also iterate each cell then do the following;
For Each row As DataGridViewRow In DataGridView.Rows
For Each cell As DataGridViewCell In row.Cells
Next
Next
|
|
|
|
|
Your foreach loop enumerates all rows, so you will be adding a parameter (called "@id") for each of them; I don't think that is appropriate, and from your symptom description it seems the first one sticks.
Suggestion: either try using the "current row" rather than all rows, or search all rows for the (first) one that actually holds some data in cell 0.
|
|
|
|
|
Luc Pattyn well i been trying ur idea but if u show me by peace code will be great !!
thanks
so much of happy ending...
|
|
|
|
|
Don't know how it's supposed to work since you did nit tell us that.
What do you expect to be in the Parameters collection?
Try stepping through in the debugger and seeing if your expectations are met.
Regards
David R
---------------------------------------------------------------
"Every program eventually becomes rococo, and then rubble." - Alan Perlis
The only valid measurement of code quality: WTFs/minute.
|
|
|
|
|
zafax_ Wrote:
when i enter a value in the Column cell(0) on first row works fine but the problem is when i enter a value in second,third ... row it doesn't work as it should be.
What is the error description?
Use <pre lang="vb"> Visual Basic Code Here.</pre>
|
|
|
|
|
Using Visual Studio 2008 and Access 2007
I have tried several different ways to track Material Activity. Table MatActivity has a field for MoveFromGUID and MoveFromType as well as Move2GUID and Move2Type. The possible combinations are: From Well to Well; from Well to StorageYard; from StrorageYard to Well and from StorageYard to StorageYard. I tried it with two tables the Well table and a separate Location table but no luck. There are 4 types of wells so I have tried to add the storageyards into the well table and just use a different code for the welltype to indicate it as a storageyard.
The following code gets me the sample data:
SELECT m.MatActivityID, m.TasksID, m.MoveFromGUID, w.Well, m.MoveFromType, m.Move2GUID, m.Move2Type, m.MaterialsID, m.Units, w.WellID, w.WellType FROM Well as w INNER JOIN MatActivity as m ON w.WellID =m.MoveFromGUID;
The following code trying to set another relationship from the well table fails to pull any data:
SELECT m.MatActivityID, m.TasksID, m.MoveFromGUID, w.Well, m.MoveFromType, m.Move2GUID, m.Move2Type, m.MaterialsID, m.Units, wWellID, w.WellType FROM Well as w INNER JOIN MatActivity as m ON (w.WellID = MatActivity.Move2GUID) AND (w.WellID = m.MoveFromGUID);
Do I need to change the table MatActivity? It basically is to document from and to locations and the units of each material being moved. There can be anywhere from several hundred units of one type of material to 30-40 types of material with only a couple of units each. It is related to the Tasks table which provides info on the crew to move the material and the dates and time assigned and actually moved. The Material table provides the description of the material to be moved.
If I need to rethink the process and change the entire table structure to be able to show the actual to and from locations and remainder of data now is the time before I get much further into the project. Any suggestions and assistance greatly appreciated
|
|
|
|