|
If they're not applicable to the current user, why show them at all? It goes against standard practices.
There's no built in support for this in the DataGrid control. You'd have to create your own DataGrid control, inheriting from DataGrid, and providing the properties and code to ownerdraw the headers yourself. You might want to Google for "ownerdraw datagrid" for something similar before attempting to tackle this. Your deadline might prevent you from implementing it.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Thanks Dave... that's what I suspected.
Since we don't have time to an "ownerdraw" solution what I've ended up doing is dynamically creating a button control and adding a click event for it which sets the DataGrid.Height property as required. The button is created Ok but the problem I'm having now is that it does not display over the top left hand corner of the DataGrid as I need it to - it's actually getting positioned in the right location but *under* the datagrid... how do I force the new button to display over the top of the DataGrid (ie: at position 0,0 in the caption)? Is there some sort of z-index as there is in HTML forms? (See the code below to see what I'm doing.)
Also, I want to be able to make the scrollbars in the grid non-visible when it collapses then re-show them when it expands - I guess it's the same problem where I'd need to draw/hide the scrollabrs myself by overriding the appropriate method or event in the DataGrid control - any thoughts on this? I don't believe there is any access to DataGrid scrollbars except via a custom DataGrid control but if you (or anyone else) knows how to do this I'd be grateful!
Cheers,
Mike
<br />
...<br />
'NB: dg1 is my DataGrid<br />
dg1.DataSource = _dataSet.Tables("customers")<br />
dg1.CaptionText = " Customers" 'Allow room for the collapse/expand button in the caption row.<br />
<br />
'Now add the expand/collapse button dynamically over the left hadn top corner of the DataGrid.<br />
Dim btnCollapse As New Button<br />
btnCollapse.Height = 20<br />
btnCollapse.Width = 20<br />
btnCollapse.FlatStyle = FlatStyle.Flat<br />
btnCollapse.Top = dg1.Top<br />
btnCollapse.Left = dg1.Left<br />
btnCollapse.Text = "-"<br />
btnCollapse.BackColor = Color.AliceBlue<br />
btnCollapse.ForeColor = Color.Navy<br />
btnCollapse.Name = "btnCollapse"<br />
btnCollapse.TabIndex = dg1.TabIndex + 1<br />
AddHandler btnCollapse.Click, AddressOf Me.btnCollapse_Click<br />
Me.Controls.Add(btnCollapse)<br />
...<br />
End Sub
|
|
|
|
|
You could try calling the button's .BringToFront method to get the control to appear on top of the DataGrid. There may be some pitfalls to doing this, like the DataGrid overpainting the button anyway, but that's about the best method you've got right now.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Thanks again Dave... I've got it working on a Form with a DataGrid dragged onto it. I now need to make a custom control (which inherits from DataGrid) but has the same ability to add the expand/collapse button dynamically. However, I can't work out which Method or Event I need to override and add the new button code to... I tried it in OnControlCreated and OnPaint (first calling each's respective MyBase method) but it just gets ignored... any advice on where I'd put something like this?
Sorry to be a pain - it's very difficult to work out where to put this stuff with all the events and methods supported by .Net controls!
Cheers,
Mike
|
|
|
|
|
OK, I think I got you confused a bit. If you're just going to create a control using existing components, then you'll want to create a User Control, inheriting from UserControl, NOT Control, or any other control.
You'll drop a DataGrid and your Button onto the designer. I think it's pretty intuitive from there. You'll initialize your instance of your control in the New method, not in any event. It's kind of the quick and dirty method to slap a control together. Really what you putting together is a wrapper around your datagrid and button to manage what they look like when the button is clicked. Your control code will just be handling the normal events and properties of the button and datagrid. About the only UserControl related event you'll have to deal with is the Resize.
I can think of a few pitfalls in putting this together.
The first is tracking what the height of your control would be expanded and colapsed. You'll have to track the current state of the control and modify you constituent controls to match the look your after.
To get rid of the scroll bars on the datagrid, you'll just have to set it's scrollbars property to None. Remember to restore this when you expand the control back to normal size.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Dave, thanks again for replying. I was wondering if I needed a UserControl instead so had planned to play around that today - I've only ever written a couple but, as you say, they're pretty intuitive. I still need a custom datagrid control but that's just to add some common methods and properties etc... so when I've done that I'll drag both that and the button on to a new user control and go from there.
With the collapsed and expanded heights I worked out the ideal height of the Caption Row (which we are always using) and I simply make the button that height. I also shift the caption over about 8 spaces to make room for it at the top left of the capton bar - so far it work well - even if it's not the most elegant solution!
Cheers,
Mike
|
|
|
|
|
Hi Developers,
I have been working in Web Application using ASP.net since a long time. In Web we have great facility of Style Sheets to follow the consistant format of different controls, like labels,tables,textfields etc. If we change the style in Style Sheet the changes appear in the whole application.
Can I have such flexibility and consistancy in desktop application using VB.net. I have heard something abt Control Collection but dnt know much abt it. Please suggest me its solution.
Thanks in advance
Lets work it Out.........!
-- modified at 3:11 Wednesday 18th January, 2006
|
|
|
|
|
The Control collection is a collection of child controls on the Control (remember that a form is also a form of control - excuse the pun) and has nothing to do with the style of controls.
ColinMackay.net
"Man who stand on hill with mouth open will wait long time for roast duck to drop in." -- Confucius
"If a man empties his purse into his head, no man can take it away from him, for an investment in knowledge pays the best interest." -- Joseph E. O'Donnell
|
|
|
|
|
There's no such thing as a style sheet in Windows Forms. You'd have to implement Skinning functionality in your code. Google for vb.net skinning[^] for examples and 3rd party libraries.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
fValue = TextWidth(lstCtrl.List(iIndex))
I got "compile error" message for the above code saying "Sub or Function not defined".
The code is in the following sub by Joshua Quick. Please tell me how to fix it, thanks.
' Analyzes given listbox and displays a horizontal scroll bar if needed.
Public Sub UpdateHorizontalScrollbar(lstCtrl As ListBox)
Dim fMax As Single
Dim fValue As Single
Dim iIndex As Integer
' Get length of longest text in listbox.
fMax = 0
For iIndex = (lstCtrl.ListCount - 1) To 0 Step -1
fValue = TextWidth(lstCtrl.List(iIndex))
If (fValue > fMax) Then fMax = fValue
Next
' Convert max text length to pixels.
fMax = fMax / Screen.TwipsPerPixelX
' Increase length for checkboxes and margins (in pixels).
If (1 = lstCtrl.Style) Then fMax = fMax + 13 ' Offset for checkbox.
fMax = fMax + 4 ' Offset for margins.
' Set horizontal scrollbar length.
SendMessage lstCtrl.hWnd, &H194, CLng(fMax) + 1, 0&
End Sub
|
|
|
|
|
Sorry about the confusion there Joy.
The TextWidth() method belongs to the Form class. The code I gave you was copied from my old form code. I guess I wrongly assumed you would copy it into your form code.
Perhaps you can replace TextWidth() with lstCtrl.TextWidth()?
I'm guessing since I don't have access to my VB6 IDE right now (I'm not at the office).
|
|
|
|
|
Perhaps you can replace TextWidth() with lstCtrl.TextWidth()?
Forget that. It's not going to work. Try this instead...
lstCtrl.Parent.TextWidth()
I'm running on pure memory and Internet searches here. So, fingers crossed! I hope this works for you.
|
|
|
|
|
hi,
i am designing a mail program using MAPI control...MAPI control using OUTLOOK to send mails.
is it possible to send mail directly to internet without using OUTLOOK.
plz send me the code for that if possible
regards paritosh
Paritosh
|
|
|
|
|
You could call the MAPI API functions directly if you wanted. Outlook and Outlook Express already do this using .DLL and .OCX wrappers.
Or you could write your own implementation of SMTP/POP3 clients and talk directly to the servers to send and receive mail.
Personally, I hate reinventing the wheel and would use existing controls and libraries to do this. But if you really want to attempt this stuff, you can find the MAPI docs here[^] on MSDN, or you can Google for "SMTP Client VB source" to find some examples.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Hi Guys, Can you tell me how to select a record from a datagrid on mouse click event. I need to select a record and get the data in textbox, modify it and again update it back to the database.
With Best Regards,
Mayur
|
|
|
|
|
Got the answer, Thnx a lot.
With Best Regards,
Mayur
|
|
|
|
|
hi
I want to use the MAPI control and make a mail pro
Paritosh
|
|
|
|
|
You're in luck! Permission Granted!
Or were you having a problem with your code somewhere??????
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
hi,
please teach me how to capture a image by using mcisendstring form playing video file.
everytime i try to do it returns an error mci device doesn't support this command.
thanx
Kanchana
|
|
|
|
|
Hey Folks,
I'm new comers in this group.
I have a question about RC4 programming.
If there anyone has RC4 script. I glad if you can share with me. I'm in studying about Encript method especially
RC4 method. I get problem to understand the algorithm.
I allready have the script but in C language. and I still got confuse. maybe you can help me please send the repply direct on my e-mail.
this is my e-mail address (Aldi_n4@yahoo.com).
Thanks before for your attention.
Happy Programming ;P
|
|
|
|
|
Dear guys,
I want to create several variable contain data that available for whole application. For example,
I want to store a UserID and I want it to be available for entire application.
In VB 6, I could simply declare a Public variable in a module and it will be available for read and write from anywhere in the application. How to do that in .Net?
Many thanks and regards,
WiL
|
|
|
|
|
You can still setup Modules in VB.NET, but I don't recommend it since it'll pollute your namespace with all public members and methods.
A better way to do it would be to create a Global class containing Shared (static in C#) member variables.
Public Class Globals
Public Shared UserID As Integer
' Shared constructor. Initializes shared member variables.
Shared Sub New()
UserID = -1
End Sub
End Class
You can now access your global variables like this...
Dim id As Integer = Globals.UserID
|
|
|
|
|
it's exactly what I want. Thank you so much.
WiL
|
|
|
|
|
where can i get flexgrid sample appiclation... How to (cellformat, cell can be clickable)... im using VB2005.net..
thank you... very much....
pls email me at welbertpm@hotmail.com
welbert
|
|
|
|
|
Why would you use the old flexgrid instead of a datagrid ?
Christian Graus - Microsoft MVP - C++
|
|
|
|