|
Hello,
I'm working on a project with a database. I'm taking the selected item from a databound Combobox and using the selected text to get a row from another table.
I'm using:
Microsoft Visual Basic 2008, Professional Edition
Here's the code:
sStringTemp2 = "Name = '" + sStringTemp + "'"
Dim tRow As DataRow() = tPlazimBases.Select(sStringTemp2)
When I set a watch for my row variable it shows it loaded the specific row from the table. But I'm unable to figure out how to put that row data in to text boxes or strings.
I'm not sure if when I did the 'select' function if that moved the selected row of the datatable to the row I'm looking for and I should then refer back to the datatable
or
If I should be using the tRow directly to get my information to load into form components
Any links or code samples would be appreciated!!
Thank you for any help!
|
|
|
|
|
Use your tRow variable:
txtName.Text = DirectCast(tRow("Name"), String)
or
txtName.Text = DirectCast(tRow(0), String)
I don't speak Idiot - please talk slowly and clearly
"I have sexdaily. I mean dyslexia. Fcuk!"
Driven to the arms of Heineken by the wife
|
|
|
|
|
Thank you for your help.
I tried your sample code but I still get and error, I've also tried tweaking is a few ways and I still get the following errors:
"Conversion from string "Name" to type 'Integer' is not valid."
"Value of type 'System.Data.Datarow' Cannot be converted to 'String'"
"Conversion from string "Name" to type 'Integer' is not valid"
Here is how I'm building my search string:
sStringTemp = CBPlazim.SelectedValue.ToString()
sStringTemp2 = "Name = '" + sStringTemp + "'"
CBPlazim is a Combobox that is displays the 'Name' column from the table I'm trying to 'pull' the row from.
It's pulling the right row in the second table. Like I mentioned above, I set a watch on the two string variables and when I have it stop before attempting to put the row somewhere, it's the right row.
Am I just going about finding the row I want in the second table wrong?
I've confirmed that the Column 'Name' in the table is a string variable
Do you know if when I'm using the search code, does it move the active record to the row I'm looking for?
modified 18-Nov-12 22:41pm.
|
|
|
|
|
Try this:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim dt As New DataTable
With dt
.Columns.Add("Name")
.Columns.Add("Address")
.Columns.Add("Salary")
.Rows.Add(New Object() {"John", "123 Some Street", 1234})
.Rows.Add(New Object() {"Frank", "15 TheOther Street", 1400})
.Rows.Add(New Object() {"Harry", "3 No Street", 450})
End With
Dim dr As DataRow = GetDataRow(dt, "John")
Label1.Text = String.Format("Name = {0}{3}Address = {1}{3}Salary = {2}",
dr("Name").ToString, dr("Address").ToString, dr("Salary").ToString, vbCrLf)
End Sub
Private Function GetDataRow(ByVal dt As DataTable, ByVal name As String) As DataRow
Dim sStringTemp2 = "Name = '" + name + "'"
Dim tRow As DataRow() = dt.Select(sStringTemp2)
Return tRow(0)
End Function
Note that your tRow object is an Array; Dim tRow as DataRow() , so we returned the first result, you may need to iterate through the array if there ismore than one result returned from the Select method.
Hope this helps.
I don't speak Idiot - please talk slowly and clearly
"I have sexdaily. I mean dyslexia. Fcuk!"
Driven to the arms of Heineken by the wife
|
|
|
|
|
Thank you again.
I didn't use your example fully but finally figured out how to use the datarow I created by tweaking what you posted. I noticed you put tRow(0). I had been using that to try and access the elements. When I typed that from your example it gave me the option of .item and I tried that. Thanks again!
I used:
tRow(0).Item(15)
and that worked to access the element in the datarow!!!
|
|
|
|
|
JRHibner wrote: I noticed you put tRow(0).
I am glad it could help you.
Remember that tRow is an Array, and that tRow(0) returns tae first item in the array. Can you guarantee that there will only ever be one result from your search? If there could be more, you may need to loop through the array to get ALL the results.
I don't speak Idiot - please talk slowly and clearly
"I have sexdaily. I mean dyslexia. Fcuk!"
Driven to the arms of Heineken by the wife
|
|
|
|
|
I can guarantee there will only be one result. As the list for the drop down each item is the 'Name' column from the table. What I'm trying to do is use that rows data to enable/disable controls on the form. So I have to 'read' the Boolean variables associated with that 'Name'
|
|
|
|
|
Thanks again for all the help.
Your questions leads me to my next one. In the above example I'm using a value from one table to find the row in another and then load those values to a form. So in that example there will always be a value in the second table due to the way the data is saved.
Now when I save the row to the database, I want to check and see if the item already exists and if I should update it or save it as a new record.
I've been using the following code to search the table before saving to determine if I need to save it or update the record.
sStringTemp = "Item = '" & MTBGeneLabel.Text & "'"
Dim tRow() As DataRow = tPlazimorphGenes.Select(sStringTemp)
If tRow(0).Item(0) Is DBNull.Value Then
SaveItemRecord(uUniqueID)
Else
UpdateItemRecord(uUniqueID)
End if
I bolded the section that is giving me issues. Trying to test if the row exists or if it's Null. I've tried quite a few variations from tutorials and answers for similar questions I found online.
|
|
|
|
|
Check this out:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim dt As New DataTable
With dt
.Columns.Add("Id")
.Columns.Add("Name")
.Columns.Add("Address")
.Columns.Add("Salary")
.Rows.Add(New Object() {1, "John", "123 Some Street", 1234})
.Rows.Add(New Object() {Nothing, "Sally", "26 This Street", Nothing})
.Rows.Add(New Object() {3, "Frank", "15 TheOther Street", 1400})
.Rows.Add(New Object() {4, "Harry", "3 No Street", 450})
End With
Dim dr As DataRow = GetDataRow(dt, "Sally")
Dim id As Integer = -1
If Not TypeOf (dr("Id")) Is DBNull Then
id = CInt(dr("Id"))
End If
Try
Label1.Text = String.Format("ID = {0}{4}Name = {1}{4}Address = {2}{4}Salary = {3}", id.ToString,
dr("Name").ToString, dr("Address").ToString, dr("Salary").ToString, vbCrLf)
Catch ex As Exception
End Try
Label2.Text = String.Format("Field 0 contains: {0}", dr(0).GetType)
If (TypeOf (dr("Id")) Is DBNull) Then
Label3.Text = "DBNull in Field 0"
End If
End Sub
Private Function GetDataRow(ByVal dt As DataTable, ByVal name As String) As DataRow
Dim sStringTemp2 = "Name = '" + name + "'"
Dim tRow As DataRow() = dt.Select(sStringTemp2)
Return tRow(0)
End Function
End Class
Notice that I used TypeOf to check the DataType in the Field and I used GetType() to return the Type.
I don't speak Idiot - please talk slowly and clearly
"I have sexdaily. I mean dyslexia. Fcuk!"
Driven to the arms of Heineken by the wife
|
|
|
|
|
I looked over the example. It's not quite my situation. In my case I'm generating a new record. I want to be able to check and make sure the Name isn't already used in the datatable. So when I go to save Information for 'Sally' it checks if there is a record for her. If there is a record her it will update that record. If there isn't a record for her it will save it as a new record.
Thanks again for your time and help
|
|
|
|
|
JRHibner wrote: I want to be able to check and make sure the Name isn't already used in the
datatable
In that case it sounds like you want to check whether a row is returned from the Select method?
If tRow.Count > 0 Then
Else
End If
I don't speak Idiot - please talk slowly and clearly
"I have sexdaily. I mean dyslexia. Fcuk!"
Driven to the arms of Heineken by the wife
|
|
|
|
|
So simple, so elegant. I'm completely overthinking that one. Thanks again!
|
|
|
|
|