Home > other >  parse value from datagrid to button name
parse value from datagrid to button name

Time:05-14

I'm building a form that has many buttons, all buttons do the same thing: add 1 every time they are clicked. Every pressed button is sent to a datagridview along with the time they are pressed. Datagrid values look like this:

a_1_serv (button name), 18:05:00(time).

Sometimes I want to delete the last row. Everything works fine so far.

When I delete the last row, I want to change the text of the button (a_1_serv).

I can parse the dgv value (a_1_serv) to a variable but I can't bind it to the appropriate button name so I can control it.

Is there a way to do it?

CodePudding user response:

Don't store your program state in your UI

Create a data structure to hold the information, and let the DataGridView be a "view", not treating it as a variable. You will save yourself headaches vs using the UI as a variable.

That said, create a class to represent your information

Public Class Data
    Public Sub New(button As Button, time As DateTime)
        Me.Button = button
        Me.Time = time
    End Sub
    <System.ComponentModel.Browsable(False)>
    Public Property Button As Button
    Public ReadOnly Property Text As String
        Get
            Return Button.Name
        End Get
    End Property
    Public Property Time As DateTime
End Class

And your code can manipulate the data in a variable off the UI. Bind the data to the DataGridView for display.

Private datas As New List(Of Data)()

Private Sub Button_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click, Button4.Click
    addButton(DirectCast(sender, Button))
End Sub

Private Sub RemoveLastButton_Click(sender As Object, e As EventArgs) Handles RemoveLastButton.Click
    removeLast()
End Sub

Private Sub addButton(b As Button)
    datas.Add(New Data(b, DateTime.Now))
    bindData()
End Sub

Private Sub removeLast()
    Dim b = datas.Last.Button
    b.Text = "new text" ' change to whatever
    datas.RemoveAt(datas.Count - 1)
    bindData()
End Sub

Private Sub bindData()
    DataGridView1.DataSource = Nothing
    DataGridView1.DataSource = datas
End Sub

This does exactly what you stated but there may be inconsistency in these two bits of information you provided: a_1_serv (button name) and I want to change the text of the button .... This changes the button text but not the name. The name is displayed in the grid. You can change the data class to display the text or whatever. But the point is this approach will keep your data off the UI and you won't need to look up the control by name anymore.

  • Related