编辑更新DatagridView VB.Net(无数据库)

时间:2013-03-26 03:50:08

标签: vb.net datagridview

大家好日子。 我在这个项目中需要你的帮助(一个没有数据库的Visual Basic程序。)它只包含一个Datagridview,一个Textbox和三个按钮(一个“Add”按钮,一个“Edit”和一个“Update”按钮)

1。有没有办法(比如使用“for loop”)自动将DataGridView1.Item("item location")分配给编辑和更新的那个?

2。或者是否可以只单击Datagridview中的项目,然后将其编辑,而不将其传递给文本框,并在此处进行更新。

3 个答案:

答案 0 :(得分:0)

单元格的双击事件中的DataGridViewCellEventArgs变量(设计器将为您生成的方法存根中为e)具有引用的RowIndexColumnIndex属性到您单击的单元格的位置。

保存那些(在可能的类变量或本地的变量中,如果你需要的话),然后在更新DataGridView中的单元格时引用它们,可能像MyDataGridView.Item(e.ColumnIndex, e.RowIndex)或{{ 1}}其中MyDataGridView.Rows(e.RowIndex).Cells(e.ColumnIndex)是双击事件处理程序中的变量。

对于您的单元格双击事件,您可以使用以下内容:

e

这将调用编辑器的新实例并从中获取值。为了这个演示的目的,我做了一个这样的表格:

公共类frmCellEditor

Private Sub DataGridView1_CellDoubleClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellDoubleClick

    Using myEditor As New frmCellEditor(Me.DataGridView1.Item(e.ColumnIndex, e.RowIndex).Value)
        If myEditor.ShowDialog() = DialogResult.OK Then
            Me.DataGridView1.Item(e.ColumnIndex, e.RowIndex).Value = myEditor.NewCellValue
        End If
    End Using

End Sub

只有两个按钮( Public NewCellValue As Integer Public Sub New(ByVal CurrentCellValue As Object) InitializeComponent() Me.TextBox1.Text = CStr(CurrentCellValue) End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Me.NewCellValue = CInt(Me.TextBox1.Text) Me.DialogResult = DialogResult.OK End Sub Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click Call Me.Close() End Sub End Class = OK,Button1 =取消)。单击“确定”后,它只返回值Button2,然后将其设置为单元格的值。

这是一个非常简单的例子,但它应该为您提供您要做的事情的基础知识。

更新:

我更新了编辑器界面的代码,因此它将包括使用datagridview从表单来回传递值的处理。

在您的项目中,制作一个名为1的新表单。这个表单必须有两个按钮和一个文本框(确保程序名称匹配!)。用上面列出的代码替换代码。您还必须在课程上方添加frmCellEditor

修改数据网格的单元格双击事件的事件处理程序,以便在构造Imports System.Windows.Forms时传递单元格值(行frmCellEditor

答案 1 :(得分:0)

您的DataGridView有多少列? 根据您填充DataGridView的方式,我假设只有1.
在表单上声明这个

Dim i as Integer  

在你的btnUpdate_Click事件上(只需将你的编辑和更新按钮合并为一个)

SELECT CASE btnUpdate.Text
    Case "Update"
         With DataGridView1
              'Check if there is a selected row
              If .SelectedRows.Count = 0 Then
                   Msgbox "No Row Selected for Update"
                   Exit Sub
              End If
              i = .CurrentRow.Index 'Remember the Row Position
              Textbox1.Text = .item(0 ,i).value 'Pass the Value to the textbox
              .Enabled = False 'Disable DataGridView to prevent users from clicking other row while updating. 
              btnUpdate.Text = "Save"
         End With
    Case Else 'Save
         DatagridView1.Item(0,i).Value = Textbox1.Text
         btnUpdate.Text = "Update"
END SELECT  

答案 2 :(得分:0)

感谢那些为此线程寻找答案的人。我暂时没有使用过您的解决方案(可能还有其他时间)。经过一些研究,我找到了问题2的答案(对此更加用户友好):

  

2。或者是否可以只单击Datagridview中的项目   它将被编辑,而不会传递给文本框,并且是   更新了。

这是我做的: 在Private Sub Form1_Load中,只需添加:

yourDataGridView.EditMode = DataGridViewEditMode.EditOnEnter
私有子中的

yourDataGridView_(此处无论发生什么事件:DoubleCellClick,CellContentClick等)添加:

DataGridView1(e.ColumnIndex, e.RowIndex).[ReadOnly] = False
DataGridView1.BeginEdit(False)