-3

みなさん、良い一日を。私が参加しているこのプロジェクト (データベースのない Visual Basic プログラム) であなたの助けが必要です。これには、Datagridview、Textbox、および 3 つのボタン (「追加」ボタン、「編集」、および「更新」ボタン) が含まれているだけです。 .

1. DataGridView1.Item("item location")編集されたものに自動的に割り当てて更新する方法はありますか (「for ループ」を使用するなど) 。

2. または、Datagridview のアイテムをクリックするだけで、テキストボックスに渡さずに編集され、その時点で更新される可能性があります。

4

3 に答える 3

0

DataGridView にはいくつの列がありますか?
DataGridView への入力方法に基づいて、1 つだけと仮定します。
これをフォームの上に宣言します 。

Dim i as Integer  

btnUpdate_Click イベントで ([編集] ボタンと [更新] ボタンを 1 つに組み合わせるだけです)

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

このスレッドの回答を見つけることに貢献してくれた人々に感謝します。私は今のところあなたのソリューションを使用していません(おそらく別の機会に)。いくつかの調査の後、私は問題 2 の答えを見つけました (よりユーザーフレンドリーです):

2. または、Datagridview の項目をクリックするだけで、Textbox に渡さずに編集され、その時点で更新される可能性があります。

これが私がしたことです: 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

セルのダブルクリック イベントの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

ボタンが 2 つあるだけです ( Button1= OK、Button2= キャンセル)。[OK] をクリックする1と、セルの値として設定される値が返されます。

これは非常に単純化された例ですが、何をしようとしているのかの基本を提供する必要があります。

アップデート:

エディター インターフェイスのコードを更新して、datagridview を使用してフォームとの間で値をやり取りするための処理が含まれるようにしました。

プロジェクトで、 という名前の新しいフォームを作成しますfrmCellEditor。このフォームには、2 つのボタンとテキストボックスが必要です (プログラム名が一致していることを確認してください)。コードを上記のコードに置き換えます。Imports System.Windows.Formsクラスの上にも追加する必要があります。

データグリッドのセル ダブル クリック イベントのイベント ハンドラーを修正して、 frmCellEditorが構築されたときにセル値を渡すようにします (行は... New frmCellEditor(...).

于 2013-03-26T04:14:37.283 に答える