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

编辑更新DatagridView VB.Net(无数据库),vb.net,datagridview,Vb.net,Datagridview,大家好。 我需要你的帮助,在这个项目中我进入(一个没有数据库的Visual Basic程序)。它只包含一个Datagridview、一个文本框和三个按钮(“添加”按钮、“编辑”和“更新”按钮) 一,。是否有任何方法(如使用“for循环”)自动将DataGridView1.Item(“Item location”)分配给已编辑并要更新的项目 二,。或者只需单击Datagridview中的某个项目,即可编辑该项目,而无需将其传递到文本框,并在该项目上进行更新。DataGridViewCellEven

大家好。 我需要你的帮助,在这个项目中我进入(一个没有数据库的Visual Basic程序)。它只包含一个Datagridview、一个文本框和三个按钮(“添加”按钮、“编辑”和“更新”按钮)

一,。是否有任何方法(如使用“for循环”)自动将
DataGridView1.Item(“Item location”)
分配给已编辑并要更新的项目


二,。或者只需单击Datagridview中的某个项目,即可编辑该项目,而无需将其传递到文本框,并在该项目上进行更新。

DataGridViewCellEventArgs变量(
e
在设计器将为您生成的方法存根中)单元格双击事件的属性有
RowIndex
ColumnIndex
属性,这些属性表示您单击的单元格的位置

保存它们(可能在类变量中,也可能在本地变量中,如果需要的话),然后在更新
DataGridView
中的单元格时引用它们,可能类似于
MyDataGridView.Item(e.ColumnIndex,e.RowIndex)
MyDataGridView.Rows(e.RowIndex).单元格(e.ColumnIndex)
其中
e
是双击事件处理程序中的变量

对于单元格双击事件,可以有如下内容:

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
这将调用编辑器的一个新实例,并从您那里获得一个值。为了演示,我制作了如下表格:

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
公共类frmCellEditor

    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
它只有两个按钮(
Button1
=确定,
Button2
=取消)。单击“确定”时,它只返回值
1
,然后将该值设置为单元格的值

这是一个非常简单的例子,但它应该为您提供您尝试做什么的基础

更新:

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

在项目中,创建一个名为
frmCellEditor
的新表单。此表单必须有两个按钮和一个文本框(确保编程名称匹配!)。用上面列出的代码替换该代码。您还必须在类上方添加
Imports System.Windows.Forms


修改datagrid的单元格双击事件的事件处理程序,以便在构建
frmCellEditor
时传递单元格值(行将
…新的frmCellEditor(…)

DataGridView有多少列?
根据您填充DataGridView的方式,我仅假设为1。
在表单顶部声明此项

Dim i as Integer  
在您的btnUpdate\u点击事件上(只需将编辑和更新按钮合并为一个)


感谢那些为这篇文章找到答案的人。我现在还没有使用你的解决方案(可能是其他时间)。经过一些研究,我找到了问题2的答案(更方便用户):

2.或者可以只单击Datagridview中的一个项目吗 它将在不将其传递到文本框的情况下进行编辑,并将 更新于此

以下是我所做的: 在Private Sub Form1_Load中,只需添加:

yourDataGridView.EditMode = DataGridViewEditMode.EditOnEnter
在Private Sub yourDataGridView(此处的任何事件:DoubleCellClick、CellContentClick等)中添加:


请阅读,然后使用链接清理您的问题,使其可读。对不起,编码员霍克。嗯,想要帮助吗?您有多少列?您好,正如您之前所问的那样。>>或者可以只单击Datagridview中的某个项,然后在该项编辑时不将其传递到文本框,并在该项更新。它是c一个,刚才说不是只读的,但我不确定它是否可以在没有数据库的情况下保存。我已经发布了我的答案。我想你是误解了。当你双击单元格时,传递给偶数处理程序的参数将包含你刚才单击的单元格的行和列索引。你可以保持这些参数足够长的时间,直到你写下新的单元格值to datagridview(或已放弃)。之后,您不再需要这些值,因此可以丢弃它们。顺便说一句,如果您只想编辑单元格,datagridview上有一个
EditMode
属性,该属性应允许您像那样编辑单元格,而无需在外部窗体之间来回传递值。我相信我误解了契德。这对我来说都是陌生的语言。对不起,兄弟。如果可以的话,我希望你能提供几行代码或其他东西来证明你的意思。是的,我熟悉编辑模式,一直在摆弄和搜索它。在datagridview活动中看到它作为私有子DataGridView1EditMode更改。但它需要一些编码,我不需要知道怎么做(好的,添加了一个示例,它应该向您展示一种可能的方法。@RedJohn Ruben的代码应该可以做您想做的事情,而不必在表单之间传递数据。如果您不能理解他的代码并使其工作,那么您现在确实在尝试做一些对您来说太复杂的事情。从更基本的事情开始,然后再工作还有,看看这个也许会让事情变得更清楚。
DataGridView1(e.ColumnIndex, e.RowIndex).[ReadOnly] = False
DataGridView1.BeginEdit(False)