|
As I said, you could remove the code that corresponds to database accesses and/or data loading of the DGV from the Designer-generated file, and stuff it in a separate method, which you then call at your leisure, e.g. from the Shown event or a button click handler.
Alternatively, you use your observation and debugging skills to figure out why it is failing right now, and try to fix it where it is now. The problem will probably not disappear just by moving the code, so analysis and fixing will probably be required anyway (albeit may be somewhat simpler when you already see the Form's content).
|
|
|
|
|
A method is just sub right, a private sub for example?
Private sub IsMethod()
End Sub
That's a sub right?
"you could remove the code that corresponds to database accesses and/or data loading of the DGV from the Designer-generated file"
Actually, the code that fills the DGV is not in the designer generated file, it's in my form1.vb file, under its own sub called PopulateGrid().
So im still a little stuck.
Virtual Space Shuttle Astronaut
modified on Tuesday, September 14, 2010 6:58 PM
|
|
|
|
|
The Mighty Atom wrote: That's a sub right?
yes and no. The keyword says "SUB", object-oriented theory says "method" (for both Sub and Function). Not sure what VB.NET documentation calls them nowadays!
The Mighty Atom wrote: it's in my form1.vb file, under its own sub called PopulateGrid().
So where do you call this method? You can't do that before InitializeComponent in the Form's constructor (it should normally be the very first action there).
What happens when you don't call it?
|
|
|
|
|
Its calles the PopulateGrid sub from a ChangedChanged sub (of a radiobutton). It does this before i even get to see the form.
Why VB actually triggers the CheckedChanged event of the radiobutton is beyond me, it should trigger when the clicks on it, in other words, when the uses changed the checked state.
Virtual Space Shuttle Astronaut
|
|
|
|
|
OK, now I see; what happens is your Visual Designer code creates the RadioButton (as you designed it), and that causes the event to already fire, well before the DGV is ready to accept the data.
Solutions are many and easy.
1.
I suggest you undo the event linking (from RadioButton CheckedChanged event to its handler) in Visual Designer, and add a line of code at the end of your Form's constructor, it would be (best guess):
myRadioButton.AddHandler(CheckedChanged , Addressof myRadioButtonChangedHandler)
i.e. it should look exactly like the line Visual Designer did create for you (see one of those ....designer.vb files I mentioned earlier).
result: no event until the DGV is ready for accepting the data.
2.
Alternative: add a test at the top of your PopulateGrid method, skipping all action when not ready.
It probably would read:
if myDataGridView is Nothing Then Exit Sub
result: disturbing early event gets ignored.
|
|
|
|
|
if myDataGridView is Nothing Then Exit Sub
With myDataGridView being the name of my DataGridView right? In my case its called dgvRAD.
Tried that but its still producing the error. I tried your second method first becuase it's a lot simpler and easier to do. But i doesn't seem to do anything.
I debugged and noticed that it it doesn't reach Exit Sub, even though the from is still not visible and so no control is created yet. So if i understand this, myDataGridView Is Nothing and it should jump to Exit Sub, but it does'nt, its continuing jumping though the rest of the code under my PopulateGrid sub.
This is strange, don't you agree?
Virtual Space Shuttle Astronaut
|
|
|
|
|
My very first reply was:
Calm down, think rationally, rerun the program inside your IDE (Visual Studio?), pay attention to all the details of the Exception, watch the linenumber, set a breakpoint, run again, look at the relevant variables, in short: debug, and earn your name.
Did you do the linenumber part at all?
|
|
|
|
|
Note to admins/mods: If you don't mind, im temporarily replying in Dutch, sinse Luc is from Belgium and im from the Netherlands, it makes things a little bit easier for me to explain this weird issue.
Ik zie trouwens dat je Belgisch bent, ik ben Nederlands. Het is vast geen probleem als ik even over ga naar het Nederlands.
Ik heb regel voor regel gedebugged en ik snap er geen fluit van. Hier is de PopulateGrid sub, ik zal uitleggen wat er precies gebeurt tijdens het debuggen:
Sub PopulateGrid()
If dgvRAD Is Nothing Then Exit Sub 'Debugger slaat dit over, ondanks dat het DGV nog niet gecreeerd was. In dat geval zou die naar Exit Sub moeten springen maar dat doet tie dus niet.
dgvRAD.Rows.Clear() 'Grid leegmaken
If rbDefaultLightsFile.Checked Then 'De radiobutton
Dim LightsReader As New StreamReader("D:\Mapping\GoldSource\Hammer\tools\lights.rad") 'Bestand dat ik wil inlezen
While LightsReader.Peek() <> -1
Dim RadEntry() As String = SplitLine(LightsReader.ReadLine()) 'Splitline is een functie dat elke gelezen regel splitst en vervolgens de gesplitste string in een stringarray plaatst
tbR.Text = RadEntry(1) 'Hier krijg ik de error over die kolommen. Waarom hier? Geen idee. Dit heeft niks te maken met de DGV, ik vraag hier enkel de waarde op van de tweede index locatie van de string array RadEntry en plaats die waarde in een textbox.
tbG.Text = RadEntry(2)
tbB.Text = RadEntry(3)
tbBrightness.Text = RadEntry(4)
dgvRAD.Rows.Add(RadEntry(0), RadEntry(1), RadEntry(2), RadEntry(3), RadEntry(4)) 'Dit is wat uiteindelijk het DGV vult met de ingelezen gegevens. Maar zover komt tie niet. Je zou dus verwachten dat tie op deze regel die collumns error zou geven maar dat doet tie bij het tbR.Text = etc.
End While
End If
End Sub
Echt, er klopt geen snars van.
Als het moet, laat ik je meekijken op mijn PC via teamviewer, dan zie je hoe vaag dit is.
Virtual Space Shuttle Astronaut
|
|
|
|
|
Taken together, your posts don't make any sense:
- your first message said: error "No row can be added to a DataGridView control that does not have columns. Columns must be added first."
- Now you say it is all happening in this line: tbR.Text = RadEntry(1) which is unrelated to any DGV, as RadEntry is a string array.
This does not make any sense. My advice is:
- if you haven't done so yet, tell your IDE to always show line numbers in edit windows (see #101 and 102 here)
- put the entire content of PopulateGrid in a try block, catch a general Exception and display the entire Exception.ToString()
- do a clean build (remove the bin and obj folders, click Clean Solution, click Build)
- make sure there are no compilation warnings/errors. If there are, fix them.
- now run, and observe carefully.
- if it goes wrong, debug. Which means: observe more detailed and even more carefully. Use break-points and single-stepping. Come up with an hypothtesis, and prove it right or wrong. Until you find and solve the problem.
|
|
|
|
|
I really don't know what the heck is going on and what to make of it.
Anyway, linenumbers are on.
Try...Catch block is in place and it catches ex as Exception (thats a general exception right?)
Also, is there a difference between
ex.message and
ex.tostring?
The errors/warnings list is empty, so no errors and warnings.
Removed the bin and obj folders.
Debugging now.
Ok, i ran through it. Now it does'nt give the error at the tbR.Text = RadEntry(1) line but at the dgvRAD.Rows.Add(... line.
Whut? Visual Studio is playing games with me.
But the error is still there. However, when i remove the event link of the radiobutton and add an addhandler line at the end of form_load, it works just fine. Finally.
Virtual Space Shuttle Astronaut
|
|
|
|
|
Hi, dear all,
I add a DataGridView to a form, I want to add row header to it. I call the following function while initialize this gridview to wish to put the row number to the row header, but it didn't shown. Do I need to set some properties to dispaly row header??
Private Sub NumberAllRows(ByVal grdStudents As DataGridView)
' Add row headers.
For i As Integer = 0 To grdStudents.Rows.Count - 1
grdStudents.Rows(i).HeaderCell.Value = i.ToString()
Next i
End Sub
Thanks!
|
|
|
|
|
|
That just works fine.
Just check the width of your rowheader, if it is less then 30, numbers will not be shown.
Make it 50 or so.
I've checked this code which uses same code, and works fine.
http://www.vb-helper.com/howto_net_datagridview_row_headers.html
|
|
|
|
|
I have to use data grid in VB 6.0 How can I make it and how can I add the columns in it.
Thanks in adv..
|
|
|
|
|
It's obvious you're new to VB development. I highly suggest abandoning VB6 and move to VB.NET before you learn too many of VB6's bad habits.
The control you're looking for is the MSFlexGrid. No, I don't have any tutorials on it because I abandonded all VB6 developement almost 10 years ago.
|
|
|
|
|
I am reading an xml file.My code is as follow-
Dim XmlDoc As New DOMDocument30
Dim nodlst As IXMLDOMNodeList
Dim nod As IXMLDOMNode
Dim Data As String
XmlDoc.async = False
'Loading the XML file on C drive
If XmlDoc.Load(TextFilePath.Text) Then
Set nodlst = XmlDoc.selectNodes("/Request")
Set nod = nodlst(0).selectSingleNode("Responce")
Set Data = nod.Text
MsgBox Data
End If
where TextFilePath.Text is the path of the xml file and file structure is as -
<Request>
<Responce>File Not Found</Responce>
</Request>
On compiling my code it is giving an error-
"User-defined type not defined......"
Please how can I rea data from xml file.
Thanks in adv..
|
|
|
|
|
There's a nice example here[^]. Did you remember to include the reference to the Xml-library?
I are Troll
|
|
|
|
|
I've been tasked with figuring out why our slides in PowerPoint are flickering when the text of an onscreen shape is changed through the code. We have a timer that counts down from 30 and occasionally while it's counting all of the objects that have any animation attached to them will flicker -- looks like they're being redrawn. But it's not every time the text in the timer is updated. I have not been able to discern a pattern. Apparently this started happening in PowerPoint 2007 and did not happen in PowerPoint 2003.
Anyone come across something like this?
Thanks!
Denise "Hypermommy" Duggan
|
|
|
|
|
I’m using Excel VBA. I have a menu structure that appears when the spreadsheet loads. This code is in Module1 which is called from ThisWorkbook with the command “Call Sub AddMenus()”. The code samples below show the structure I’m working with. From UserForm1, for example, I need to reference a variable. I assume I need to create an object to talk to Module1 but can’t figure out how to do that in VBA (I’m familiar to C# but new to VBA).
Module1
Public Sub AddMenus()
Dim FormIndex As Integer
Dim ReportViewName(2 To 4) As String
‘create menu structure for the workbook
‘read variable values – FormIndex=2, etc.
End Sub
UserForm1
Want to say: “variable = Module1.FormIndex” but obviously doesn’t work
ThisWorkbook
Private Sub Workbook_Open()
Call Module1.AddMenus
End Sub
|
|
|
|
|
Try making "Module1" public - I'm not sure whether it works, but might be that it's private by default. Creating a new variable would only have to be done if it we're a class. I believe a module is a static class in C#-terms, and making it public should make it's methods visible
I are Troll
|
|
|
|
|
Thanks for your quick reply, Eddy. Dumb q: How do I make Module1 public? Also, would it help to put the code in a Class Module?
|
|
|
|
|
Hoping, just the same as you would with a method;
Public Module1
Public Sub AddMenus()
Dim FormIndex As Integer
Dim ReportViewName(2 To 4) As String
‘create menu structure for the workbook
‘read variable values – FormIndex=2, etc.
End Sub
Tim Bostwick wrote: Also, would it help to put the code in a Class Module?
That would make it a class, and you'd have to create an instance before you use it;
Dim MyVar as ClassModule1
Set MyVar = New ClassModule1
What version of Excel are you in BTW?
I are Troll
|
|
|
|
|
Wouldn't something like below allow you to access the value of the variable outside the function?
Public Module1
Public FormIndex As Integer
Public Sub AddMenus()
Dim ReportViewName(2 To 4) As String
‘create menu structure for the workbook
‘read variable values – FormIndex=2, etc.
End Sub
If so, do look into class modules and create a property with a getter
I are Troll
|
|
|
|
|
Right, but when AddMenus() runs, it won't create the FormIndex variable, right?
The general issue is, How do you use Workbook_Open (in ThisWorkbook) to load public variables in Module1?
Possibility #1: Do as you indicate above, make FormIndex public with the problem already mentioned.
Possibility #2: Declare FormIndex public in ThisWorkbook. But I also have arrays that need to be read and ThisWorkbook won't allow arrays?
Is there any way to get all of Module1 read by Workbook_Open?
|
|
|
|
|
Hi
Have you actually tried the Possibility #1 you mention above? In the AddMenus in Module1, try assigning a value to the FormIndex variable and then get the value to display in your UserForm... I think you will find that it works!
|
|
|
|
|