-3

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

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

2. 或者是否可以只单击 Datagridview 中的一个项目,然后在不将其传递给文本框的情况下对其进行编辑,然后进行更新。

4

3 回答 3

0

感谢那些为寻找这个线程的答案做出贡献的人。我暂时没有使用您的解决方案(也许其他时间)。经过一番研究,我找到了问题 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)
于 2013-03-28T14:54:51.327 回答
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  
于 2013-03-26T08:17:42.627 回答
0

单元格双击事件的变量DataGridViewCellEventArgs(在设计者将为您生成的方法存根中)具有和属性,这些属性引用您单击的单元格的位置。eRowIndexColumnIndex

保存这些(可能在一个类变量中,如果这就是你所需要的,则保存在一个本地变量中),然后在更新 中的单元格时引用它们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(...).

于 2013-03-26T04:14:37.283 回答