how to update, insert records through datagridview to sql using data adapter or other method in vb.net - sql

hello best programmers in the world i need your expert advise and assistance with regards to my project.
I am trying to insert and update my table through datagridview by clicking a command button,
i have my datagridview properties set to editmode : editprogrammatically,
here's the code, of where i pulled up my datagridview content:
Public Sub loaddgvfrm3()
cmdconn = New SqlConnection
cmd = New SqlCommand
cmdconn.ConnectionString = sqlstr
cmdconn.Open()
cmd.Connection = cmdconn
cmd.CommandText = "select period, VOUCH_AMT, INDIVIDUAL_AMT, check_no, D_MAILED, DIR_NO from tobee.EBD_BILLHISTORY where CLAIM_NO like '" + txtClaimno.Text + "'"
Dim dt As New DataTable
da = New SqlDataAdapter
da.SelectCommand = cmd
da.Fill(dt)
Me.DataGridView1.DataSource = dt
Me.DataGridView2.DataSource = dt
cmdconn.Close()
End Sub
now i have my command buttons here
here's the add button: (im prefering to add a row within the selected table)
Private Sub btnAdd_Click(sender As Object, e As EventArgs) Handles btnAdd.Click
End Sub
here's the Edit button:
Private Sub btnEditmain_Click(sender As Object, e As EventArgs) Handles btnEditmain.Click
''Form1.ShowDialog()
'DataGridView2.AllowUserToAddRows = True
''DataGridView2.BeginEdit(True)
'btnSave.Enabled = True
End Sub
and here's the save button that should save all changes that i have done,
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
Dim connstr As String = "server=midtelephone\sqlexpress; database=testdb; user= sa; password=sa;"
End Sub
i left command button contents empty because i need to create a new method of inserting, updating the row. because the one that i have earlier was a fail, although it inserts the data in the sql, but not in its appropriate row, take a look at here: Data inserted from datagridview not updated in SQL Server , instead it creates another row which is not connected with '" + txtClaimno.Text + "'" (stated from above) so what happens is that it stacks a new row with no connected owner from another table(claim_no < this claim_no is connected from another table as a fk in the database but a primary key in (billhistory table))
can you pls help me get rid of this problem as i am having a hard time moving to the next phase of our project? im just a high school student, so pls bear with me :) i'll appreciate if u give comments / answers regarding my question :) thanks in adv.
my mentor advised me to use data adapter accept changes stuff, but i don't know how to implement such stuffs. pls help me thank you :)

Use Event to get data from gridview on cellConttent Click and these values to a query or Stored procedure.
private void grdCampaignStats_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
//I want to get value of SomeColumn of grid view having datatype String
string SomeVariabel = grd["CoulmnNameinGRID", e.RowIndex].Value.ToString();
// Make it according to Vb it is C# code
}

Related

VB.Net Combo Box Number from Query

So i have a database with 2 rows code,name lets say its like
code / name
1 / john
2 / george
i use this query to bring them in my combo box .
strConnection = String.Format("Provider=SQLOLEDB;Data Source={0};Initial Catalog={1};User ID={2};Password={3};",
strServer, strDataBase, strUserName, strPassword)
Dim Connection As New OleDbConnection(strConnection)
Connection.Open()
Dim cm As New OleDbCommand("SELECT Codeid [Κωδικός],descr [Περιγραφή] FROM EMBONILO_B.DBO.manufacturer GROUP BY Codeid,descr", Connection)
Dim dr As OleDbDataReader = cm.ExecuteReader
While dr.Read
ComboBox.Items.Add(dr(1).ToString)
End While
dr.Close()
Connection.Close()
and it show the name john and george. What i want is when you click the combo box and you select a name i want the code to appear on the combo box lets say if its george selected i want number 2 in combo box etc.
Thanks for advance.
When you are adding items to the ComboBox you are only setting the Text property, not the Value property. ComboBox.Items.Add() should have an overload where you can do specify the Value as well when you had items in your While loop, something like ComboBox.Items.Add(dr(1).ToString(), dr(0).ToString()) or maybe ComboBox.Items.Add(New ListItem(dr(1).ToString(), dr(0).ToString())) if you are using ASP.NET WebForms for example. Either way, each list item will have separate Text and Value properties; you want to put the ID in the Value property, and you can subsequently get the selected ID in your code using ComboBox.SelectedValue or similar, depending upon the control you are using for a combobox.
My assumption is you really want to obtain the ID in code to store in a db table, not display it in the UI.
This all applies to a WinForms application.
Declare a Form level variable to hold the CodeID of the currently selected descr in the combobox.
Since GetDescriptionData is called from Form.Load the values strServer, strDatabase etc. used in the connection string, must be available at this time. If they are not available until some user input is gathered move the code to a button. .DisplayMember and .ValueMember are names of fields from the Select statement.
Separate the data access code from the user interface code. Connections and commands need to be closed and disposed. Using...End Using blocks take care of that for us.
The form level variable CurrentCodeID is set in the ComboBox.SelectedIndexChanged event.
Private CurrentCodeID As String
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim ComboDataTable = GetDescriptionData()
ComboBox1.DisplayMember = "descr"
ComboBox1.ValueMember = "Codeid"
ComboBox1.DataSource = dt
End Sub
Private Function GetDescriptionData() As DataTable
Dim dt As New DataTable
Dim strConnection = String.Format("Provider=SQLOLEDB;Data Source={0};Initial Catalog={1};User ID={2};Password={3};",
strServer, strDataBase, strUserName, strPassword)
Using Connection As New OleDbConnection(strConnection),
cm As New OleDbCommand("SELECT Codeid,descr FROM EMBONILO_B.DBO.manufacturer;", Connection)
Connection.Open()
dt.Load(cm.ExecuteReader)
End Using
Return dt
End Function
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
CurrentCodeID = ComboBox1.SelectedValue.ToString
End Sub

how to pass multiple values using single textbox in vb.net?

I am doing vb.net programming. In that, I am using one textbox, one gridview and one button. Now, I want to pass queries into the textbox and when clicking on button, I want to display the result into the datagridview.
i.e suppose i am passing selection query and clicking on button at that time i want to display the table data into the datagridview.
I don't know what Db you are using but I have an example using Sql.
Example:
You want to get the Name from the Students Db.
Dim dt As New DataTabale
Dim con As New SqlConnection("connection")
Dim cmd As New OdbcCommand("SELECT * FROM [Students] WHERE [Name] = #Name", con)
con.Open()
cmd.Parameters.Add("#Name", SqlDbType.NVarChar).Value = TextBox.Text
dt.Load(cmd.ExecuteReader())
GridView1.DataSource = dt
GridView.DataBind()
You can place this code on Button.
Ps. I view your the edit history of your code and I saw that you are using Db.
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
Dim query As String = TextBox1.Text
Try
SqlDataSource1.SelectCommand = query
SqlDataSource1.DataBind()
Catch ex As Exception
MsgBox("No results returned")
End Try
End Sub

Autofill TextBox/Checkbox from a previous TextBox' value (VB.NET Database)

Note: I'm using Visual Studio, original work was on SQL Server, moved to VB.NET
I have a Textbox "ViewStatusTxt", next to it there's a Button "ViewStatusBtn"
Below it there's a TextBox "ViewNAMETxt", another TextBox "ViewACTIVITYTxt" and then a Checkbox "ModifyStatusCB"
I'm trying to auto-fill the Checkbox AND the Textbox based on the ID input there, however I really have no clue about it since I'm new to VB.NET
Here's the code used
Private Sub IDSearch(StatusViewBtn As String)
' ADD SEARCH QUERY PARAMETERS - WITH WILDCARDS
SQL.AddParam("#StatusViewBtn", StatusViewBtn)
'RUN QUERY - SEARCH GIVES THOSE RESULTS
SQL.ExecQuery(" SELECT
aID,
Name,
Status,
Activity
FROM
[dbo].[initialTable]
WHERE
aID = #StatusViewBtn
ORDER BY
aID ASC")
End Sub
That's the function's code, which is fully working since it's a smaller version of the same one I used in a Search Page
Here's the button's function, which I'm sure is where I'm having problems, unless I need to add a specific function to the ViewNAMETxt
Private Sub StatusViewBtn_Click(sender As Object, e As EventArgs) Handles StatusViewBtn.Click
IDSearch(StatusViewBtn.Text)
ViewNAMETxt.Text = SQL.ExecQuery("SELECT
Name
FROM
initialTable
WHERE
aID = #StatusViewBtn")
End Sub
And I haven't even started on the Checkbox, viewing how the first one caused me issues. Hopefully the solution would be similar to both of them.
Thanks for reading guys, and sorry for the newbie question
1- Suppose you have a table named YourTable(int KeyColumn, string StringColumn, boolean BooleanColumn)
2- Create a form and put 2 textboxes and a checkbox and a button on it. KeyColumnTextBox, StringColumnTextBox, BooelanColumnCheckBox, SearchButton
3- In click event handler for SearchButton put the codes:
Private Sub SearchButton_Click(sender As Object, e As EventArgs) Handles SearchButton.Click
Dim connection = New SqlConnection("Your Connection string here")
Dim command = New SqlCommand("SELECT StringColumn, BooleanColumn FROM YourTable WHERE KeyColumn=#KeyColumn", connection)
command.Parameters.Add(New SqlParameter("#KeyColumn", Int32.Parse(KeyColumnTextBox.Text)))
connection.Open()
Dim reader = command.ExecuteReader()
While reader.Read()
StringColumnTextBox.Text = reader.GetString(0)
BooleanColumnCheckBox.Checked = reader.GetBoolean(1)
End While
End Sub
Don't forget to Imports System.Data.SqlClient at top of your file.

How can I have 2 gridviews in one form with same dataset, but other population?

Here you see my code of a form with 2 gridviews. Both have the same dataset, bindingsource. The dataset which is made out of a datasource, has 2 different sql queries.
filld() and fillauswahl() filld shows in the gridview a "select distinct" query.
When the user hits the button1, the selected item from that gridview is saved in "verzeichnis1" this var gets pasted to fillauswahl() which is
select* from mytable where columnx = verzeichnis1
The problem I have is that both gridviews get filled during formload with filld() and by clicking the button with fillverzeichnis() i dont know how to seperate that!? i guess it´s very easy. Cheers and thanks
Public Class Importverzeichnis
Public verzeichnis1 As String
Private Sub Importverzeichnis_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
Me.SKM2TableAdapter.Filld(Me.SLXADRIUMDEVDataSet.SKM2)
Catch ex As System.Exception
System.Windows.Forms.MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
For Each cell As DataGridViewCell In DataGridView1.SelectedCells
verzeichnis1 = cell.Value
Next
Me.SKM2TableAdapter.Fillauswahl(Me.SLXADRIUMDEVDataSet.SKM2, verzeichnis1)
End Sub
End Class
Edit: I created a new connection a new datset and new dataadapter and now it works:
Dim connectionString As String = My.Settings.SLXADRIUMDEVConnectionString
Dim sql As String = "SELECT * FROM SKM2 where
Benutzerdefiniert_10 ='" & verzeichnis1 & "' "
Dim connection As New SqlConnection(connectionString)
Dim dataadapter As New SqlDataAdapter(sql, connection)
Dim ds As New DataSet()
connection.Open()
dataadapter.Fill(ds, "verzeichnis")
connection.Close()
datagridview2.DataSource = ds
datagridview2.DataMember = "verzeichnis"
but I would be more happy if can use my first dataset and my first adapter. If anyobdy knows how I can do this, I would be happy for the answer
To me the best way would be to just pull down the data as a your normal select statement and then filter the data in your code-behind. By populating a dataset with the same data twice your just making the traffic from the database slower. However, if you wish to keep your current dataset, I would assume that there are two tables in it, one for each select. If that is the case then change:
datagridview2.DataSource = ds
to:
datagridview2.DataSource = ds.Tables(1) 'assumes the second table is used for this datasource

displaying detailed form based on textbox value and a button

i have a form named "search" with 2 textboxes,datagridview and a buttton. when i enter any keyword such as a name i want into the first textbox ["txtemployee_search"], it filters the datagridview [dgvemployee]items which is binded to the employee table.so when i select the name im looking for, it shows up in the second textbox["txtemp_search_selection"].but MY PROBLEM IS, I WANT TO SHOW OR OPEN A SECOND FORM CONTAINING THE DETAILS like name,age,sex,picture,phone,etc which are related to the name in the second textbox WHEN I CLICK THE BUTTON. im using vb 2008 and sql server 2005.I NEED HELP PLS!!!
below is my code
Imports System.Data.SqlClient
Public Class employee_search
'THE CODE TO SEARCH DATAGRID WHILE TYPING INTO FIRST TEXTBOX
Private Sub txtemployee_search_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtemployee_search.TextChanged
Dim keywords As String = txtemployee_search.Text
Dim con As SqlConnection = New SqlConnection("Data Source=oheneba;Initial Catalog=brainiac;Persist Security Info=True;User ID=sa;Password=***********")
' Use wildcard
Dim cmd As SqlCommand = New SqlCommand("SELECT * FROM Employee WHERE Full_Name Like '%" & keywords & "%' ", con)
' or Where Full_Name='" & keywords & "'
con.Open()
Dim myDA As SqlDataAdapter = New SqlDataAdapter(cmd)
Dim myDataSet As DataSet = New DataSet()
myDA.Fill(myDataSet, "Employee")
dgvemployee.DataSource = myDataSet.Tables("Employee").DefaultView
con.Close()
End Sub
'CODE TO DISPLAY SELECTED DATAGRIDVIEW ITEM INTO THE SECOND TEXTBOX
Private Sub dgvemployee_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvemployee.CellContentClick
Dim dgv As DataGridView = CType(sender, DataGridView)
Dim thisCell As DataGridViewCell = dgv.SelectedCells(0)
Dim selCell As Integer = thisCell.ColumnIndex
txtemp_search_selection.Text = dgvemployee.CurrentRow.Cells(selCell).Value.ToString()
End Sub
The approch is a bit diffrent that you should choose.
Sorry if i'm wrong but i'll wive you an example with 2 grids. one with customers and one with orders (the relation must be right on the DB). So use 2 BindingSource objects. one with Customers and one with Orders.
so we have
CustomersBindingSource
OrdersBindingSource
Set on property window
CustomersBindingSource.Datasource = yourDataset
CustomersBindingSource.DataMember = Customers
OrdersBindingSource.Datasource = OrdersCustomersfkBindingSource
and about filtering the way that i suggest is this one:
CustomersBindingSource.filter = "Customername like " & txtCustomFilter
i'm in a little hurry now.. but if you have more questions i'll be happy to help you.
If you want additional details in another form, then what you need to do is create the second form with the details. Add in databinding, just like you did for the datagridview, and navigate to the correct record. You should be able to pass the full name selected from the datagridview into the new form.
tIndex = Me.MyBindingSource.Find("Full_Name", keywords)
If tIndex = -1 Then 'could not find
'employee not found
Else
Me.MyBindingSource.Position = tIndex 'navigate to found record
End If
CODE TO DISPLAY SELECTED DATAGRIDVIEW ITEM INTO THE SECOND TEXTBOX
Try this ..
txtemp_search_selection.Text = dgvemployee.CurrentCell.Value