-
Oct 6th, 2017, 04:22 PM
#1
Thread Starter
Fanatic Member
[RESOLVED] DGV Column issue
I have a DGV that displays a list of approvers using the following code:
Code:
Me.TblChangeApproveTableAdapter.FillByChangeID(Me._MasterBase4_0ItemMasterDataSet.tblChangeApprove, glbintCRNum)
dgvSignList.DataSource = Me._MasterBase4_0ItemMasterDataSet
dgvSignList.Height = 406
dgvSignList.Width = 779
dgvSignList.DataMember = "TblChangeApprove"
dgvSignList.Columns(0).Visible = False
dgvSignList.Columns(1).Visible = False
dgvSignList.Columns(2).HeaderText = "Name"
dgvSignList.Columns(2).Width = 275
dgvSignList.Columns(3).HeaderText = "Job Title"
dgvSignList.Columns(3).Width = 275
dgvSignList.Columns(4).HeaderText = "Department"
dgvSignList.Columns(4).Width = 225
dgvSignList.Columns(5).Visible = False
dgvSignList.Columns(6).Visible = False
dgvSignList.Columns(7).Visible = False
dgvSignList.Columns(8).Visible = False
dgvSignList.Columns(9).Visible = False
No problem, the DGV lists exactly what I want from this table.
So what I do is use a DGV double_Click() event to select one of the persons displayed on the list:
Code:
glbstrName = CStr(Me.dgvSignList.Rows(e.RowIndex).Cells(5).Value.ToString)
RemoveApprover()
You will note that in the first code block above most of the columns have had .Visible = False.
So my problem is that the data I am interested in is in a column that .Visible = False and ONLY the fields with .Visible = True will provide a value for the variable in the second set of code. So how do I squeeze a value from a column that .Visible = False?
-
Oct 6th, 2017, 04:26 PM
#2
Re: DGV Column issue
It shouldn't matter. The DGV is bound to a datatable, which has rows. You know the selected row in the DGV, which is the row of interest in the underlying datatable, so you can get the data from there based off the RowIndex.
At first, I was surprised to hear that you couldn't get the data from a hidden field in the DGV. I guess I'm still surprised at that, but I realized I don't think I have ever tried, because I always go to the datasource for information.
My usual boring signature: Nothing
-
Oct 6th, 2017, 04:39 PM
#3
Thread Starter
Fanatic Member
Re: DGV Column issue
I do not believe that I have experienced this problem when I use the Properties window to set datasource and datamember for the DGV. However, this particular DGV, depending on where it is called from, might use different tables so that is why I set the datasource and datamember in the code. Anyway, I have ran the second block set using different column numbers and it only provides a value when the .Visible = True in the first code block.
It would appear that there must be another setting for that column that is required if .Visible = False.
-
Oct 6th, 2017, 05:03 PM
#4
Hyperactive Member
Re: DGV Column issue
CStr and then .Value.ToString, no need!!
I would use just CStr, .ToString provides you with a exception if the value is dbnull.
Code:
glbstrName = CStr(Me.dgvSignList.Rows(e.RowIndex).Cells(5).Value)
-
Oct 6th, 2017, 05:03 PM
#5
Thread Starter
Fanatic Member
Re: DGV Column issue
I have been doing some more experimenting and it turns out that I am wrong about .Visible = False being the issue. I guess there has to be a first for everything.
So here is what I am after. I want to obtain the value of the primary key assign that value to a variable
Code:
glbintIDNum = CInt(Me.dgvSignList.Rows(e.RowIndex).Cells(0).Value.ToString)
However, the variable instead is assigned -1.
-
Oct 6th, 2017, 05:08 PM
#6
Hyperactive Member
Re: DGV Column issue
Can you post the rest of the code you use to remove the aprovern including the event and the methode?
-
Oct 6th, 2017, 05:15 PM
#7
Thread Starter
Fanatic Member
Re: DGV Column issue
Code:
Private Sub dgvSignList_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvSignList.CellDoubleClick
If glbintCount = 1 Then
glbintIDNum = CInt(Me.dgvSignList.Rows(e.RowIndex).Cells(0).Value)
RemoveApprover()
ElseIf glbintCount = 2 Then
RemoveTrainee()
Else
MsgBox("Case Failure")
End If
End Sub
-
Oct 6th, 2017, 05:17 PM
#8
Thread Starter
Fanatic Member
Re: DGV Column issue
Code:
Private Sub RemoveApprover()
Try
Me.TblChangeApproveTableAdapter.FillByApproveID(Me._MasterBase4_0ItemMasterDataSet.tblChangeApprove, glbintIDNum)
Me._MasterBase4_0ItemMasterDataSet.tblChangeApprove(0).blnRemoved = False
Me._MasterBase4_0ItemMasterDataSet.tblChangeApprove(0).strSignature = "Removed by Admin, " + glbstrName + CStr(DateAndTime.Now)
Me.Validate()
Me.tblChangeApproveBindingSource.EndEdit()
Me.TblChangeApproveTableAdapter.Update(Me._MasterBase4_0ItemMasterDataSet)
Me.TblChangeApproveTableAdapter.FillByActive(Me._MasterBase4_0ItemMasterDataSet.tblChangeApprove, glbintCRNum)
With dgvSignList
.Enabled = False
End With
Catch ex As Exception
'Message for user removal failure
Dim strMessage As String = Nothing
'glbstrMessage = CType(HelpMessage.NoRemoveMessage(strMessage), String) + "from Approval table"
'MsgBox(glbstrMessage)
End Try
End Sub
Forgot this part
-
Oct 6th, 2017, 05:22 PM
#9
Hyperactive Member
Re: DGV Column issue
First you wanna make sure you clicking a valid row and not the column headers:
Code:
Private Sub dgvSignList_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvSignList.CellDoubleClick
'I added this
if e.RowIndex > -1 Then
If glbintCount = 1 Then
glbintIDNum = CInt(Me.dgvSignList.Rows(e.RowIndex).Cells(0).Value)
RemoveApprover()
ElseIf glbintCount = 2 Then
RemoveTrainee()
Else
MsgBox("Case Failure")
End If
End IF
End Sub
Last edited by Mike Storm; Oct 6th, 2017 at 05:24 PM.
Reason: Corrected RowIndex miss spealing
-
Oct 6th, 2017, 05:23 PM
#10
Hyperactive Member
Re: DGV Column issue
What does happen, does it gives you a exception?
-
Oct 6th, 2017, 05:35 PM
#11
Thread Starter
Fanatic Member
Re: DGV Column issue
It does when I take it out of the Try/Catch that I have. I have not run it that far because I can see that I am getting no value assigned to variable when I take that value from the column containing the primary key.
-
Oct 6th, 2017, 05:38 PM
#12
Hyperactive Member
Re: DGV Column issue
Replace column index by column name
Code:
glbintIDNum = CInt(Me.dgvSignList.Rows(e.RowIndex).Cells("ColumnName here").Value)
also you should check if the value is not dbnull
-
Oct 6th, 2017, 05:41 PM
#13
Hyperactive Member
Re: DGV Column issue
Inside of the try catch or out of it should trow you the exception anyway
-
Oct 6th, 2017, 05:45 PM
#14
Thread Starter
Fanatic Member
Re: DGV Column issue
Mike,
I did use the code that you suggested. However, I still get -1 for the value of the variable after that line is executed.
-
Oct 6th, 2017, 05:48 PM
#15
Hyperactive Member
Re: DGV Column issue
Explain:
Is the exception trown under the doubleclick event or under RemoveApprover?
-
Oct 6th, 2017, 05:55 PM
#16
Thread Starter
Fanatic Member
Re: DGV Column issue
The exception occurs during the Update(). It was that error that lead me back to what I am looking at currently. So here is what I am trying to do.
I am wanting to delete a person from the displayed DGV list with a double click. I have been using a methodology to accomplish that but I never really liked it because of the way it works.
The old method would distribute the values from a record into a set of variables. The row would then be removed, a new row created and then populated from the variables. It worked, but I have always hated it.
What I am wanting to do now is take the row selected from the double click and just go ahead and replace the values in two of the columns with different values.
-
Oct 6th, 2017, 06:03 PM
#17
Hyperactive Member
Re: DGV Column issue
I m not understanding, and i dont have VS here now, can you post the exception message?
-
Oct 6th, 2017, 06:19 PM
#18
Thread Starter
Fanatic Member
Re: DGV Column issue
Here you go:
-
Oct 6th, 2017, 06:27 PM
#19
Hyperactive Member
Re: DGV Column issue
I dont understand why you in you first post you fill TblChangeApproveTableAdapter, i guess that code will be under some other event like form load, and then you fill TblChangeApproveTableAdapter again under RemoveApprover
-
Oct 6th, 2017, 06:30 PM
#20
Thread Starter
Fanatic Member
Re: DGV Column issue
Here is what it is that I think I should know and what I am seeing as a problem.
When I execute this code here is what occurs:
glbintIDNum = CInt(Me.dgvSignList.Rows(e.RowIndex).Cells("intChangeID").Value)
The value for glbintIDNum = 10000. This is the value that is in intChangeID.
If I run execute this code instead
glbintIDNum = CInt(Me.dgvSignList.Rows(e.RowIndex).Cells("intApproveID").Value)
The value for glbintIDNum = -1. This is the value that is in intApproveID = 6
intApproveID is a primary key field in this table and is an autoincrement integer field. inChangeID is just an integer field and is not a primary key. That is the only difference I can define between the two.
-
Oct 6th, 2017, 06:34 PM
#21
Hyperactive Member
Re: DGV Column issue
If the -1 value is the return of the Indexkey/Primary Key then you hgetting the index of a new row that has not been yet saved.
Means your table has no rows, either couse you not filling it, or the value of the Where "clousele" does not exists on that table.
-
Oct 6th, 2017, 06:41 PM
#22
Thread Starter
Fanatic Member
Re: DGV Column issue
Actually, I get -1 if I selected the first record in the DGV, -2 the second, -3 ...... I guess that is the explanation for the index. OK, I don't understand why, but I see that is apparently what it is doing. So my question is why is it not instead outputting the actual value contained in that field? It does output the actual value for any other field named.
-
Oct 6th, 2017, 06:45 PM
#23
Hyperactive Member
Re: DGV Column issue
I have no ideia about that one, but if you add a databound datagridview to a form and leave the autoincrement primary key visible, while you dont save the data you will see that the auto increment will be -1, -2, -3 and so on...
You need to check you code and see whats happening.
-
Oct 6th, 2017, 07:19 PM
#24
Thread Starter
Fanatic Member
Re: DGV Column issue
Interesting. I am not sure even where I would look in the code to find what is occurring. One thing that is clear is that there are only four of the 10 columns/fields, will output a value to the variable when the line of code above is run. So what kind of code should I be looking at that would limit which columns can be read and the value extracted?
-
Oct 6th, 2017, 07:27 PM
#25
Hyperactive Member
Re: DGV Column issue
I have no idea what may be actualy cousing that, first i would do would be set visible all datagridview columns and see its values.
-
Oct 6th, 2017, 07:44 PM
#26
Thread Starter
Fanatic Member
Re: DGV Column issue
OK, I did that. I did see where the primary key field does show an index instead of the actual field value. However, it is still only the 4 fields that actually output a value to a variable. I don't know what that means, but it is clear that somewhere (upstream in the code) those four columns are declared or defined and the others are not.
-
Oct 6th, 2017, 07:49 PM
#27
Hyperactive Member
Re: DGV Column issue
I dont understand very well what 4 fields do you refear to?
-
Oct 6th, 2017, 07:53 PM
#28
Thread Starter
Fanatic Member
Re: DGV Column issue
I found it. It was not in the code, it was in my query. The only columns SELECT in the query used were those 4 fields. I normally just put all of the fields into the SELECT command line but apparently did not do this for this query. Damn, that was hard to find.
-
Oct 6th, 2017, 07:54 PM
#29
Hyperactive Member
Re: DGV Column issue
I was thinking there where a a problem with the fill.
-
Oct 6th, 2017, 08:00 PM
#30
Thread Starter
Fanatic Member
Re: DGV Column issue
Yeah, that was always at the back of my mind too. Anyway, thanks and I like that I actually figured one out myself.
-
Oct 6th, 2017, 08:02 PM
#31
Hyperactive Member
Re: [RESOLVED] DGV Column issue
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|