• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 318
  • Last Modified:

Can I know the top and width of the current cell On datagridview

Can I know the top and width of the current cell On datagridview  or any cell
0
Ahmadal_najjar2003
Asked:
Ahmadal_najjar2003
  • 8
  • 8
1 Solution
 
jpaulinoCommented:
You can look in the row or column width, but can you explain better what you want ?
0
 
Ahmadal_najjar2003Author Commented:
I really have an idea in my mind when the user want to make a bill by using datagridview. there are columns such as (ProductCode , ProductDesc) . the user may not saving the product code in his mind so I will give him option to type some text of the product description and the send a command to sql server database with like %% then I put the result which may contain more than one item into a listbox to select from . I want to put this listbox in the same place of productdesc column until he select the item then I make it unvisible.

If you have another idea.

Ahmad
0
 
jpaulinoCommented:
That is more hard (not impossible) to achive but ...

I would add a button on the row and when he clicks, it just open a modal form with the search option. Then after the user select/accept the product code, it closes the form and add that code to the current row of the datagridview.

Another option is to insert a combobox with all the options (but I like more the first one)
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
Ahmadal_najjar2003Author Commented:
I don't think it is imposible. I did it but I need the listbox to follow the currentrow to bo opened as proffecien way.
0
 
jpaulinoCommented:
>> I don't think it is imposible

I didn't say that! You want the listbox near to the cell, right ?
0
 
Ahmadal_najjar2003Author Commented:
I don't think it is imposible. I did it but I need the listbox to follow the currentrow to bo opened as proffecien way.
0
 
Ahmadal_najjar2003Author Commented:
First sorry for (imposible) because you said (not imposible) . Second sorry for repeate the comment , some error with my internet.

Thats right i need it neer the cell ?
0
 
jpaulinoCommented:
>> First sorry for (imposible) because you said (not imposible) . Second sorry for repeate the comment , some error with my internet.

No problem :)

You can do something like this to display the listbox near to the row you have selected (you can use cell enter event or other). You then can show/hide as you like.
        Dim recRow As New Drawing.Rectangle
        Dim recCol As New Drawing.Rectangle
 
        With Me.DataGridView1
            recRow = .GetRowDisplayRectangle(.CurrentCell.RowIndex, False)
            recCol = .GetColumnDisplayRectangle(.CurrentCell.ColumnIndex, False)
            Me.ListBox1.Left = recCol.X + 10
            Me.ListBox1.Top = recRow.Y + .CurrentRow.Height + 10
        End With

Open in new window

0
 
Ahmadal_najjar2003Author Commented:
I tried it but not success will with me.
But What I think as I Want listbox to be within the ProdectDesc only. and at design time I put it on product desc column. Then each time at runtime I just change the Top of it as follow
ListBox1.Top = ListBoxOriginalTop + .current.Height * RowIndex   ' as rowindex is fixed for all rows

And it works fine.

0
 
jpaulinoCommented:
>> ListBox1.Top = ListBoxOriginalTop + .current.Height * RowIndex   ' as rowindex is fixed for all rows

But that way you cannot change the size of the rows. The method that I have showed you works fine for shure - I have tested (of course).

You just need the check what column is select:
If Me.DataGridView1.CurrentCell.ColumnIndex = 2 Then
  ' show the listbox
End If

What else problems did you found ?
0
 
Ahmadal_najjar2003Author Commented:
ok ,
My listbox top  as design time is = 160

after
   Me.ListBox1.Top = recRow.Y + .CurrentRow.Height + 10
is 35+22+10 = 67

so now list box out of datagridview
0
 
jpaulinoCommented:
Have you used the cellenter event for the code I have showed you ?

I will upload a simple sample.
0
 
Ahmadal_najjar2003Author Commented:
Yes Now I tried it with CellEnter , but the problem still exists with Top.
0
 
jpaulinoCommented:
Opppsss! I'm really sorry but I have posted the wrong code!

That was the first test I have done.  Try this one now and sorry once again:
     Private Sub DataGridView1_CellEnter(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEnter
        Dim recRow As New Drawing.Rectangle
        Dim recCol As New Drawing.Rectangle
 
        With Me.DataGridView1
            recRow = .GetRowDisplayRectangle(.CurrentCell.RowIndex, False)
            recCol = .GetColumnDisplayRectangle(.CurrentCell.ColumnIndex, False)
            Me.ListBox1.Left = recCol.X + .Left + 10
            Me.ListBox1.Top = recRow.Y + .Top + 10
        End With
    End Sub

Open in new window

0
 
Ahmadal_najjar2003Author Commented:
Thank You.
0
 
jpaulinoCommented:
Glad I could help!

jpaulino
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

  • 8
  • 8
Tackle projects and never again get stuck behind a technical roadblock.
Join Now