【问题标题】:How to display data on Gridview in ASP.NET 4.0 when we click button?当我们单击按钮时,如何在 ASP.NET 4.0 中的 Gridview 上显示数据?
【发布时间】:2012-09-16 12:23:12
【问题描述】:
Imports System.Data.Odbc
Imports System.Data
Partial Class VIEW_SALARY_DETAILS
     Inherits System.Web.UI.Page

   Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim cons, query As String
    Dim con As OdbcConnection
    Dim adpt As OdbcDataAdapter
    cons = "dsn=Courier; UID=Courier; PWD=123;"
    con = New OdbcConnection(cons)
    con.Open()
    query = "select * from EMPLOYEE"
    Dim ds As DataSet
    adpt = New OdbcDataAdapter(query, con)
    ds = New DataSet
    adpt.Fill(ds, "Courier")
    GridView1.DataSource = ds.Tables()
    con.Close()
   End Sub
End Class

我写了上面的代码,但它没有显示数据。 同样的事情在 VB.NET 应用程序中也是可能的。 我们如何为 ASP.net 4.0 做到这一点?

【问题讨论】:

    标签: asp.net .net vb.net


    【解决方案1】:

    你在

    之后错过了一行
    GridView1.DataSource = ds.Tables[0]   //do some correction here..
    
    GridView1.DataBind();        // add this line
    

    您需要将 GridView 与数据源绑定..

    您的代码将是

    Imports System.Data.Odbc
    Imports System.Data
    Partial Class VIEW_SALARY_DETAILS
         Inherits System.Web.UI.Page
    
       Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim cons, query As String
        Dim con As OdbcConnection
        Dim adpt As OdbcDataAdapter
        cons = "dsn=Courier; UID=Courier; PWD=123;"
        con = New OdbcConnection(cons)
        con.Open()
        query = "select * from EMPLOYEE"
        Dim ds As DataSet
        adpt = New OdbcDataAdapter(query, con)
        ds = New DataSet
        adpt.Fill(ds, "Courier")
        GridView1.DataSource = ds.Tables[0]
        GridView1.DataBind()
        con.Close()
       End Sub
    End Class
    

    确保您使用的连接或 sql 字符串正确。

    【讨论】:

    • 上面的数据库连接是正确的.....我可以使用上面的连接类型将值插入数据库......但是无法将整个表数据显示到gridview......
    • "必须指定 DataKeyNames 才能使持久选择起作用。"发生此错误
    • 为什么你将持久选择属性设置为 true。删除旧的 GridView 首先不知道你做了什么。从工具箱中获取一个新的 GridView。选择自动生成的列属性 true。希望一切顺利。
    【解决方案2】:

    您需要调用DataBind() 方法。试试这个

    DataSet ds= new DataSet();    
    GridView1.DataSource = ds.Tables();
    GridView1.DataBind();
    

    【讨论】:

      【解决方案3】:

      我建议这样做:

      假设这个标记:

      所以我们拖入了一个按钮和一个gridview。

      现在,双击按钮,我们得到/拥有这个代码存根:

      Imports System.Data.SqlClient
      
      Public Class HotelGrid
      Inherits System.Web.UI.Page
      
      Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
      
      End Sub
      
      
      Sub LoadGrid()
      
          Using cmdSQL As New SqlCommand("SELECT ID, FirstName, LastName, HotelName, City from tblHotels",
                          New SqlConnection(My.Settings.TEST3))
      
              cmdSQL.Connection.Open()
              GridView1.DataSource = cmdSQL.ExecuteReader
              GridView1.DataBind()
      
          End Using
      
      End Sub
      
      Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
      
          LoadGrid()
      
      End Sub
      
      
      End Class
      

      在这里注意一些重要的事情。

      首先我非常推荐一般的 sql 数据拉取,使用 sql 命令对象。

      为什么?

      嗯,命令对象有:

      A place to hold/have/set the sql (sql command text)
      A connection object - no need to create a separate one
      A data reader - no need to create a separate one
      

      换句话说,sql 命令对象具有所有三个基本位和部分来提取数据。

      而且我们经常想说某种记录集(数据表),所以我们可以这样做:

         dim MyTable as new DataTable
          Using cmdSQL As New SqlCommand("SELECT ID, FirstName, LastName, HotelName, City from tblHotels",
                          New SqlConnection(My.Settings.TEST3))
      
              cmdSQL.Connection.Open()
              MyTable.load(cmdSQL.ExecuteReader)
      
              GridView1.DataSource = MyTable
              GridView1.DataBind()
      
          End Using
      

      所以请注意上面我们是如何创建一个数据表对象的。然后可以将该数据表与 for/each 进行交互。您甚至可以编辑该表中的数据,或者如上所示,使用数据加载数据表 - 然后将其分配给网格视图。

      结果输出是这样的:

      仅供参考: 在我的示例中,我使用了 sqlclient 提供程序。在您的情况下,您使用的是 ODBC 提供程序。所以上面的代码是完全一样的,但是现在使用 ODBC,我们得到了这个:

      所以代替 ado.net(sql 客户端),您使用 ODBC。所以你有一个

      Imports System.Data.Odbc
      

      因此我们的负载网格代码可能/将是这样的:

      Sub LoadGrid2()
      
          Using cmdSQL As New OdbcCommand("SELECT ID, FirstName, LastName, HotelName, City from tblHotels",
                          New OdbcConnection(My.Settings.TEST3ODBC))
      
              cmdSQL.Connection.Open()
              GridView1.DataSource = cmdSQL.ExecuteReader
              GridView1.DataBind()
      
          End Using
      
      End Sub
      

      因此,请注意代码实际上是如何“相同”的,但只是使用不同的提供程序(在您的情况下为 ODBC)。

      您仍然可以声明并使用“数据表”来保存查询结果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-03
        • 1970-01-01
        相关资源
        最近更新 更多