0

私は でGridview満たされたdataTable、で満たされた を持っていDataAdapterます。これが、 grid が に最初に読み込まれる方法Page_Loadです。検索機能を追加するには、同じことを行いTextBox.Textますが、パラメーターとしてSELECT... LIKE ...ステートメントに渡します。編集機能 (すべての行にボタン) を追加するにdataTableは、 dataTable. 問題は、その値を維持する (永続化する) 方法がわからないことと、dataTable編集ボタンを押したときに列が 0 であるため、編集するものが表示されないことです。を使用しているために発生すると思いますが、Usingおそらく のdataTable後にクリーンアップされてEnd Usingいます。

その場合、どうすれば直せますか?削除することを考えmiconn.Close()ましたが、何も解決しません。実際、接続がまだ開いているかどうかはわかりませんEnd Using

コード:

Dim con As New Connection
Dim table As New DataTable()

Private Sub fill_grid()

    Using miconn As New SqlConnection(con.GetConnectionString())
        Dim sql As String = "SELECT area,lider_usuario FROM AREA"
        Using command As New SqlCommand(sql, miconn)
            Using ad As New SqlDataAdapter(command)
                ad.Fill(table)
                GridView1.DataSource = table
                GridView1.DataBind()
                'miconn.Close()
            End Using
        End Using
    End Using

End Sub

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Not IsPostBack Then
        fill_grid()
        End If

End Sub

Protected Sub btnSearch_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSearch.Click

        Dim miCon As New Connection
        Using miconn As New SqlConnection(miCon.GetConnectionString())
            Dim sql As String = "SELECT area,lider_usuario FROM AREA WHERE area LIKE @area"
            Using command As New SqlCommand(sql, miconn)
                command.Parameters.Clear()
                command.Parameters.Add("@area", SqlDbType.VarChar).Value = "%" + TextBox1.Text + "%"
                Using ad As New SqlDataAdapter(command)
                    ad.Fill(table)
                    GridView1.DataSource = table
                    GridView1.DataBind()
                    'miconn.Close()
                End Using
            End Using
        End Using
End Sub

  Protected Sub EditRow(ByVal sender As Object, ByVal e As GridViewEditEventArgs)
        GridView1.EditIndex = e.NewEditIndex
        GridView1.DataSource = table
        GridView1.DataBind()
    End Sub

   Protected Sub CancelEditRow(ByVal sender As Object, ByVal e As GridViewCancelEditEventArgs)
        GridView1.EditIndex = -1
        GridView1.DataSource = table
        GridView1.DataBind()
    End Sub
4

2 に答える 2

1
BindGrid()
{
   var dt = YourMethodReturningDatatable();
   ViewState["Table"] = dt;
   grid.DataSource = ViewState["Table"];
   grid.Databind();
}

page_load
{
   if(not ispostback) // not because my 1 key stopped working.
   {
     BindGrid();
   }
}
于 2013-09-12T19:20:59.003 に答える