【问题标题】:How bind single record data to controls in ASP.NET?如何将单条记录数据绑定到 ASP.NET 中的控件?
【发布时间】:2011-08-22 19:36:57
【问题描述】:

在 ASP.NET 4 中,从 sql server 获取的单个记录中绑定数据的最佳控制/方法是什么?我有一些页面来显示文本,所以我需要标题、出版日期、内容等标签 - 每个数据的单个标签。我当然可以使用 ListView 或 Repeater,但我想知道是否有其他方式。

提前致谢

【问题讨论】:

    标签: asp.net sql-server data-binding


    【解决方案1】:

    您可以使用 DetailsView,它旨在显示单个记录(尽管它通常用于主从场景)。 DetailsView 可以使用 SqlDatasource。

    简单的例子:

    <asp:SqlDataSource id="slqDataSource1" runat="server"
         ConnectionString="<%$ ConnectionStrings:MyConnectionString %>"
         SelectCommand="SELECT * FROM Table" />
    
    <asp:DetailsView id="detailsView1" runat="server"
         AutoGenerateRows="true" DataKeyNames="Id"
         DataSourceID="sqlDataSource1" />
    

    上面的例子基于SqlDataSource的SelectCommnad创建了一个DetailsView。在上面的实现中,由于 AutoGenerateRows 设置为 true,因此控件将呈现数据。但是,您也可以显式指定字段,并且可以选择不同的字段(BoundField、ButtonField、CheckBoxField 等)。

    DetailsView Class

    【讨论】:

      【解决方案2】:

      sqldatareader 不错。

      您可以创建一个 sql 命令,然后使用 .executereader 方法。例如:

      dim myReader as SqlDatareader
      Dim myCommand As New SqlCommand("myStoredProcedure", myConnection)
              With myCommand
                  .CommandType = CommandType.StoredProcedure
                  With .Parameters
                      .Clear()
                      .AddWithValue("myParameter", parametervalue)
                  End With
              End With
      Try
         myConnection.open
         myReader = myCommand.ExecuteReader
         While myReader.Read
             Me.myTextBox.Text = myReader("fieldname")
             Me.myCheckbox.Checked = myReader("fieldname")
         End While
      Catch ex As Exception
         Response.Write(ex.Message)
      Finally
         myConnection.Close()
      End Try
      

      或者类似的……

      【讨论】:

      • 好的,很好 - 但也许是使用 SqlDataSource 的东西?
      • 通常,SqlDatasource 由数据绑定控件(如gridview、listview、formview 等)使用,而通常用于具有多条记录的数据集。由于您只有一条记录,我认为您只会使用标签和 texbox 等,而不是数据绑定控件。无论如何,如果不使用数据绑定控件(听起来您不想使用),我认为您需要使用代码隐藏。在这种情况下,上面的解决方案可能是你最好的。 (您也可以在代码隐藏中使用 sqldatasource,但它比仅使用上面的 sqldatareader 更复杂)。
      • 好的,我明白了。顺便说一句,将源模式更改为 datareader 在性能方面是否可能与您的解决方案更相似?
      • @deha -- 我认为性能对你来说不是问题。正如其他人建议的那样,您可以将其放入它自己的类中(而不是它可能位于的页面类)。为您节省多少开销取决于很多事情 - 最后,任何一种方式都会比您眨眼更快地加载数据。
      【解决方案3】:

      您不能将数据绑定到文本字段。但是,使用上面列出的阅读器会产生一大堆不必要的开销。为什么不创建一个类? 这样您就可以在 DAL 中获取它,然后在 BLL 中进行一些处理(或转换)。

      无论如何我都会这样做。除非您正在绑定,否则不应使用 DataReaders 和 DataSets。

      【讨论】:

        猜你喜欢
        • 2010-10-04
        • 2010-11-10
        • 2017-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-16
        • 2013-02-18
        • 1970-01-01
        相关资源
        最近更新 更多