大家好日子。 我在这个项目中需要你的帮助(一个没有数据库的Visual Basic程序。)它只包含一个Datagridview,一个Textbox和三个按钮(一个“Add”按钮,一个“Edit”和一个“Update”按钮)
1。有没有办法(比如使用“for loop”)自动将DataGridView1.Item("item location")
分配给编辑和更新的那个?
2。或者是否可以只单击Datagridview中的项目,然后将其编辑,而不将其传递给文本框,并在此处进行更新。
答案 0 :(得分:0)
单元格的双击事件中的DataGridViewCellEventArgs
变量(设计器将为您生成的方法存根中为e
)具有引用的RowIndex
和ColumnIndex
属性到您单击的单元格的位置。
保存那些(在可能的类变量或本地的变量中,如果你需要的话),然后在更新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)