2

VS 2010 (ローカル データベース ファイル オプション) で作成された SQL Server Compact データベースがあります。フォーム ロード ( CategoryForm) で、データベースから値を にロードしますDataGridView1ButtonColumnまた、パーツに使用するエクストラをプログラムで追加しDeleteます。問題はこれです:

  • 最初のフォームの読み込み時に、任意の行で初めて削除を押したときに機能します。もう一度押してもダメ。
  • ボタンを 2 回目にクリックすると、印刷されMsgboxたテキストがボタンのテキストになります。(削除) (スクリーンショットを含む) ps 以下で説明するように、余分なものをコメントアウトすると、正しい値が返されます。

私が試したこと:

  • SQL関連のすべてをコメントアウトしRowIndex、そのインデックスの特定のセルの値と値を取得する部分だけを残しました。私はそれらの両方を に印刷しますMsgBox。私が得る値は正しいです。たとえば、最初の行の0インデックスと値testは texttestです。

以下は私の進行状況とスクリーンショットです。

CellContentClick方法:

Private Sub DataGridView1_CellContectClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellContentClick

    Dim i As String

    'If e.ColumnIndex = 1 Then
    'If e.RowIndex >= 0 And e.RowIndex <= DataGridView1.Rows.Count - 1 Then

    i = DataGridView1.Rows(e.RowIndex).Cells(0).Value.ToString
    MsgBox(e.RowIndex)
    MsgBox(i)
    SQLStringDelete = "DELETE FROM Category WHERE categoryname = '" & i & "'"
    SQLConn.ConnectionString = ConnString 'Set the Connection String
    SQLConn.Open() 'Open the connection
    SQLCmd.Connection = SQLConn 'Sets the Connection to use with the SQL Command
    SQLCmd.CommandText = SQLStringDelete 'Sets the SQL String
    SQLCmd.ExecuteNonQuery() 'Executes SQL Command

    'Create Adapter
    Dim DataAdapter As SqlCeDataAdapter = New SqlCeDataAdapter("SELECT categoryname FROM Category", SQLConn)
    'Create DataSet
    Dim Dataset As New DataSet
    'fill the datset
    DataAdapter.Fill(Dataset)
    'attach dataset to the datagrid
    With DataGridView1
        .DataSource = Dataset.Tables(0)
        .Columns(0).HeaderText = ""
        .Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
    End With

    DataAdapter = Nothing
    Dataset = Nothing

    SQLConn.Close() 'Close the connection



End Sub

Form_Load方法:

 Private Sub CategoryForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SQLConn.ConnectionString = ConnString 'Set the Connection String
        SQLConn.Open() 'Open the connection

        'Create Adapter
        Dim DataAdapter As SqlCeDataAdapter = New SqlCeDataAdapter("SELECT categoryname FROM Category", SQLConn)
        'Create DataSet
        Dim Dataset As New DataSet
        'fill the datset
        DataAdapter.Fill(Dataset)
        'attach dataset to the datagrid
        With DataGridView1
            .DataSource = Dataset.Tables(0)
            .Columns(0).HeaderText = ""
            .Columns(0).AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
        End With

        DataAdapter = Nothing
        Dataset = Nothing
        SQLConn.Close()

        With buttonColumn
            .Name = "DeleteButtonColumn"
            .HeaderText = ""
            .Text = "Delete"
            .UseColumnTextForButtonValue = True
            .AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
            .Width = 50
        End With

        If DataGridView1.Columns.Count = 1 Then
            DataGridView1.Columns.Add(buttonColumn)
        End If

    End Sub

スクリーンショット:

セル値の代わりに返されるボタン テキスト

数回クリックした後もまだそこにあります:)

4

1 に答える 1

0

2回目のクリックごとに列が自動再生成され、列が再配置されることがわかりました。DataGridView1.AutoGenerateColumns = falseフォームのロードとイベントの両方に設定するだけで機能します。

于 2013-05-14T18:01:13.633 に答える