Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 348
  • Last Modified:

Windows Form - Changes in DataGrid cause Button to change

I have a simple form (code below).  What I would like to have happen is if the user makes changes to the information in the datagrid, then btnUpdate would change color.  For example, the user changes the vendor address from 123 Main St to 456 Elm St.  As soon as the user begins typing the change, btnUdate changes color to bring to the user's attention that they Update button needs to be clicked before exiting the program.

Is this possible?


Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SqlDataAdapter1.Fill(DsVendors1)

    End Sub

    Private Sub btnClearDataSet_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClearDataSet.Click
        DsVendors1.Clear()

    End Sub

    Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
        Me.Close()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SqlDataAdapter1.Fill(DsVendors1)

    End Sub


    Private Sub btnUpdate_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click
        If DsVendors1.HasChanges Then
            SqlDataAdapter1.Update(DsVendors1)
        End If
    End Sub

    Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click
        Me.Close()
    End Sub

   ****** Private Sub DataGrid1_?????????(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.???????
        If DsVendors1.HasChanges Then
            btnUpdate.BackColor = Color.Red
            btnUpdate.ForeColor = Color.White
        End If
  *******  End Sub
End Class
0
painted
Asked:
painted
  • 4
  • 2
  • 2
  • +1
2 Solutions
 
newyuppieCommented:
i think the dataset haschanges wont reflect it has changes until you exit the cell in the datagrid, and you EndEdit on the bindingsource.
if you want to change the color of the button as soon as the user starts typing, maybe handle the CurrentCellDirtyStateChanged event (if you are using vb2005):

Sub dataGridView1_CurrentCellDirtyStateChanged( _
    ByVal sender As Object, ByVal e As EventArgs) _
    Handles dataGridView1.CurrentCellDirtyStateChanged

    If dataGridView1.IsCurrentCellDirty Then
        btnUpdate.BackColor = Color.Red
            btnUpdate.ForeColor = Color.White
    End If
End Sub
0
 
SanclerCommented:
If you're not on 2005, you'll need something like the sample code downloadable from this

http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c44c.aspx#q1018q.

The actual download link is

http://www.syncfusion.com/faq/winforms/Files/ForumTextChangedInDataGrid.zip

Roger
0
 
paintedAuthor Commented:
Sorry for not noting this before.  I am using VS2005
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
paintedAuthor Commented:
newyuppie,
Thanks for the code, but I think I'm in over my head here.  

I dimmed dataGridView1 As DataGridView.  Now I am getting an error "Handle clause requires a with event variable defined in the containing type or one of it's base types".

Can you help with this or lead me to a tutorial or sample?
0
 
newyuppieCommented:
dim withevents datagridview1 as datagridview
0
 
paintedAuthor Commented:
ok, the error is gone, but it's still not working.  Any other ideas?

Thanks,
donna
0
 
davidrichardsonCommented:
I know its not what you asked but if you add the following it will update before the for is closed if the user hasn’t clicked the update button.

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        If DsVendors1.HasChanges Then
            SqlDataAdapter1.Update(DsVendors1)
        End If
    End Sub
0
 
SanclerCommented:
donna

newyuppie's code should work.  You need to put it in the CurrentCellDirtyStateChanged sub for your EXISTING datagridview, and change the reference in it from dataGridView1 to the name of your EXISTING datagridview.  Your question didn't actually show the name of your datagridview - unless its name is DataGrid1.  It was the use of that as a name that made me think you might be using VB.NET 2003, as the standard control in that is a DataGrid.  But in VB.NET 2005 the standard control is a DataGridView.  They are quite different animals, and the latter has the facility that newyuppie describes whereas the former does not.

Roger
0
 
paintedAuthor Commented:
Thanks Sancler and newyuppie!  Works like a charm.  Took me a couple of tries to get this right, but the code and explanation got me on track.  Thanks for all you help.

donna
0

Featured Post

Free Tool: SSL Checker

Scans your site and returns information about your SSL implementation and certificate. Helpful for debugging and validating your SSL configuration.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now