今天是个好日子。我在这个项目中需要你的帮助(一个没有数据库的 Visual Basic 程序。)它只包含一个 Datagridview、一个文本框和三个按钮(一个“添加”按钮、一个“编辑”和一个“更新”按钮) .
1. 有没有办法(比如使用“for循环”)自动分配DataGridView1.Item("item location")
给编辑和更新的那个?
2. 或者是否可以只单击 Datagridview 中的一个项目,然后在不将其传递给文本框的情况下对其进行编辑,然后进行更新。
今天是个好日子。我在这个项目中需要你的帮助(一个没有数据库的 Visual Basic 程序。)它只包含一个 Datagridview、一个文本框和三个按钮(一个“添加”按钮、一个“编辑”和一个“更新”按钮) .
1. 有没有办法(比如使用“for循环”)自动分配DataGridView1.Item("item location")
给编辑和更新的那个?
2. 或者是否可以只单击 Datagridview 中的一个项目,然后在不将其传递给文本框的情况下对其进行编辑,然后进行更新。
感谢那些为寻找这个线程的答案做出贡献的人。我暂时没有使用您的解决方案(也许其他时间)。经过一番研究,我找到了问题 2 的答案(对用户更友好):
2. 或者是否可以只单击 Datagridview 中的一个项目,然后在不将其传递给文本框的情况下对其进行编辑,然后进行更新。
这是我所做的:在 Private Sub Form1_Load 中,只需添加:
yourDataGridView.EditMode = DataGridViewEditMode.EditOnEnter
在 Private Sub yourDataGridView_(这里的任何事件:DoubleCellClick、CellContentClick 等)中添加:
DataGridView1(e.ColumnIndex, e.RowIndex).[ReadOnly] = False
DataGridView1.BeginEdit(False)
您的 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
单元格双击事件的变量DataGridViewCellEventArgs
(在设计者将为您生成的方法存根中)具有和属性,这些属性引用您单击的单元格的位置。e
RowIndex
ColumnIndex
保存这些(可能在一个类变量中,如果这就是你所需要的,则保存在一个本地变量中),然后在更新 中的单元格时引用它们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
= Cancel)。当您单击确定时,它只返回值1
,然后将其设置为单元格的值。
这是一个非常简单的示例,但它应该为您提供您正在尝试做的事情的基础知识。
更新:
我更新了编辑器界面的代码,因此它将包括处理使用 datagridview 从表单来回传递值。
在您的项目中,创建一个名为frmCellEditor
. 此表单必须有两个按钮和一个文本框(确保程序名称匹配!)。将代码替换为上面列出的代码。您还必须Imports System.Windows.Forms
在类上方添加。
修改数据网格的单元格双击事件的事件处理程序,以在 frmCellEditor
构造时传递单元格值(行... New frmCellEditor(...)
.