VB 2008 - DatagridView RowLeave event error

Each row of DataGridView has a field, uProjectID that in which Visible = False.  I want to assign a Value to this field during the RowLeave event.  However, the field uProjectID "cannot be found".  This is shown in the error pictured below.

Should the word "Item" in the assignment statement be changed to reflect "column name"?

Why does this error occur and how is this error overcome?

error.JPG
ljcorAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

JackOfPHCommented:
Change it to:


EvalItemDatagridView.Item(uProjectID.index, EvalItemsDatagridView.CurrnetRow.index).Value = uItemID

Open in new window

0
ljcorAuthor Commented:
The design-time compiler does not like:
  EvalItemDatagridView.Item(uProjectID.index,
It says uProjectID is not declared.   It is a field name in the row.
0
JackOfPHCommented:
Is it the columname in the datagridRow?

uProjectID should be the name of the column...
0
Exploring SQL Server 2016: Fundamentals

Learn the fundamentals of Microsoft SQL Server, a relational database management system that stores and retrieves data when requested by other software applications.

ljcorAuthor Commented:
It is the name of the column just as it is spelled here: uProjectID.  It is not visible but that should not matter, I believe.  It is still in the row/s.
0
ljcorAuthor Commented:
There were a couple of small typo's in your statement but I modified them as I entered the statement.

EvalItemsDataGridView.Item(uProjectID.index, EvalItemsDataGridView.CurrentRow.Index).Value = uItemID
0
JackOfPHCommented:
Is it working now?
0
ljcorAuthor Commented:
No.  I had made the corrections as I put the statement in initially.  Did not change it since.
0
JackOfPHCommented:
Is the uProjectID is the first column in the grid?
0
ljcorAuthor Commented:
No, it is the last column.  The last visible column does require data entry by the user.
0
JackOfPHCommented:
what would be the output if you do this?

msgbox(uProjectID.index)
0
ljcorAuthor Commented:
Just so you know, if I change the reference to uProjectID to the name of one of the interior (visible) fields, the same error shows up.
0
JackOfPHCommented:
is it binded?
0
ljcorAuthor Commented:
When I put in that Msgbox statement I still get the same error - not declared.

The fields are all bound.

And Jack, I am not feeling well and have to go to bed now.  If you come up with another thought just feel free to post it.  If I wake up later (or even tomorrow) I will get back to it.  It can wait until tomorrow if necessary.  I can work around it until then.
0
JackOfPHCommented:
ok...
0
JackOfPHCommented:
This function will show you all the columns you have in the gridview, from there select the column name that you think is the name of uProjectID, then replace uProjectID in your code to the one you select.


Put this line of code in the last line of your form load event...

RetrieveColumnamesInTheGrid


 
Private Sub RetrieveColumnamesInTheGrid 
 
For ctr As Integer = 0 To DataGridView1.Columns.Count - 1
 
            MsgBox("Column name: " & DataGridView1.Columns(ctr).Name & " ColumnIndex: " & DataGridView1.Columns(ctr).Index)
 
        Next
 
End Sub

Open in new window

0
ljcorAuthor Commented:
Here is the list generated by your test procedure:

Column Name: DataGridTextBoxColumn2 ColumnIndex: 0
Column Name: DataGridTextBoxColumn3 ColumnIndex: 1
Column Name: DataGridTextBoxColumn4 ColumnIndex: 2
Column Name: DataGridTextBoxColumn5 ColumnIndex: 3
Column Name: DataGridTextBoxColumn6 ColumnIndex: 4
Column Name: DataGridTextBoxColumn7 ColumnIndex: 5
Column Name: DataGridTextBoxColumn8 ColumnIndex: 6
Column Name: DataGridTextBoxColumn9 ColumnIndex: 7
Column Name: DataGridTextBoxColumn1 ColumnIndex: 8

Also is an attached screenshot of the "Edit Columns" properties showing uProjectID


                         
error.JPG
0
JackOfPHCommented:
In your screen shot the uProjectID is not the name of the column it is the text of the column the one that you see in the header.

Name of the column is the one below:

use that value in your code...


error.JPG
0
ljcorAuthor Commented:
The (Name) is: DataGridViewTextBoxColumn2.  That is a copy of that line.  I didn't type it.
0
JackOfPHCommented:
the code should be like this:
EvalItemsDataGridView.Item(DataGridViewTextBoxColumn2.index, EvalItemsDataGridView.CurrentRow.Index).Value = uItemID
 
 
or 
 
EvalItemsDataGridView.Item("DataGridViewTextBoxColumn2", EvalItemsDataGridView.CurrentRow.Index).Value = uItemID

Open in new window

0
ljcorAuthor Commented:
I put it in as you show in line1 above. When I ran it I received an error Dialog window saying that uProjectID does not accept nulls.

So I ran it again with a messagbox showing the uItemID.  It is not null.  It shows a value of 100051, just as it should.
0
ljcorAuthor Commented:
Here is the line as it is being executed:
        EvalItemsDataGridView.Item(DataGridViewTextBoxColumn2.Index, EvalItemsDataGridView.CurrentRow.Index).Value = uItemID
0
JackOfPHCommented:
Did you call any save, before executing your code?

This happens because in your database you set the property of the field AcceptNull to false.
0
ljcorAuthor Commented:
I don't know what you mean by "call any save."

It is true that I set AcceptNull to false.  Isn't that what it should be?  uProjectID is the unique Key to the record and should never be null, I believe.  Am I thinking wrong here?
0
JackOfPHCommented:

If this is an Access Database at is the Primary key use the Autonumber datafield instead.

And if it SQL Server Set the Identity Seed to yes.


By Doing this you will automatically incrementing the value and no need for the additional code...

Jack
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
JackOfPHCommented:
It is late in the afternoon here...

I need to go... I will check out this thread tomorrow...

Take care friend...

:)
0
ljcorAuthor Commented:
This is a Compact SqlServer DB.  I did not want to have the automatic increment at the time I set it up but I don't recall why now.  Probably just a bit of faulty thinking.  

But should that matter to the problem going on here?
0
ljcorAuthor Commented:
Thanks Jack.  We can take it up then.
0
ljcorAuthor Commented:
Jack - I did set the Identity seed and made that automatic.  Then it worked just fine without any code at all.  As I am sure you knew.  I thank you for all of your help on this.  I am still left with one similar problem we haven't approached yet but that can be worked on another time.  And where are you located, Singapore?  Hong Kong? or similar?
0
JackOfPHCommented:
I am from the Philippines, Remember?
0
ljcorAuthor Commented:
Oh yes! The Philippines.  My memory is not always in working order.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Visual Basic.NET

From novice to tech pro — start learning today.