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

问题描述:

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

1。有没有什么办法(如使用“for循环”)自动将DataGridView1.Item("item location")分配给编辑的并更新?

2。或者只能单击Datagridview中的某个项目,然后将其编辑,而不必将其传递到文本框,并在此处进行更新。

+1

请阅读[关于格式化帖子的帮助](http://*.com/editing-help),然后使用[编辑]链接清理问题,使其可读。 – 2013-03-26 04:06:52

+0

对于Coder Hawk感到抱歉。呃,想帮忙吗? – RedJohn 2013-03-26 04:55:15

+0

你有多少列? – 2013-03-26 08:01:41

DataGridViewCellEventArgs变量(e的方法存根设计师将为您生成)细胞的双击事件有RowIndexColumnIndex特性,这是指您单击的单元格的位置。

拯救那些(在一个类变量可能还是本地的,如果这就是你所需要的),然后参考他们当您更新单元格在你的DataGridView,可能这样MyDataGridView.Item(e.ColumnIndex, e.RowIndex)MyDataGridView.Rows(e.RowIndex).Cells(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 

这将调用你的编辑器的一个新实例,并从你得到的值。对于此演示的目的,我做了一个形式是这样的:

公共类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 = OK,Button2 =取消)。当您单击确定时,它仅返回值1,然后将其设置为单元格的值。

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

UPDATE:

我更新的代码编辑器界面,使其包括用于处理从表单传递值来回您的datagridview。

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

修改为您的DataGrid的细胞双击事件的事件处理程序,通过单元格的值时frmCellEditor构造(行会... New frmCellEditor(...)

+0

我想你是误会。双击单元格时,传递给偶数句柄的参数将包含刚刚单击的单元格的行和列索引。你坚持那些足够长的时间直到你将新的单元格值写入datagridview(或放弃它)。之后,你不再需要这些值,所以你可以放弃它们。 – 2013-03-26 04:44:25

+0

顺便说一下,如果你只想编辑一个单元格,datagridview上有一个EditMode属性,它应该允许你像这样编辑单元格,而不必在外部来回传递值形成。 – 2013-03-26 04:46:20

+0

我相信我的确误解了。这对我来说都是陌生的语言。兄弟抱歉。我希望你的代码提供一些代码或者东西来展示你的意思,如果没关系的话。 – RedJohn 2013-03-26 04:49:28

多少列做您的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 
+0

发布了我的不完整代码。请看一下。 – RedJohn 2013-03-27 03:40:41

+0

@RedJohn鲁本的代码应该做你想做的,而不必在表单之间传递数据。如果你无法理解他的代码并使其工作,那么你现在真的想做一些对你来说太复杂的事情。从更基本的事情开始,然后按照自己的方式工作。也可以看看这个http://www.dotnetperls.com/datagridview-vbnet也许它会让事情更清楚。 – 2013-03-27 04:15:02

感谢那些谁寻找答案该线程贡献。我现在还没有使用过你的解决方案(也许是其他时间)。经过一番研究,我找到了问题2的答案(对用户更友好):

2。或者可以只点击Datagridview中的一个项目,然后 它将被编辑,而不会传递给文本框,并且在那里更新为 。

这里就是我所做的: 在私人小组Form1_Load的,只需添加:

yourDataGridView.EditMode = DataGridViewEditMode.EditOnEnter 

在私人小组yourDataGridView_(不管事件在这里:DoubleCellClick,CellContentClick等)加:

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