直接绑定到sqldatasource的数据

本文关键字:数据 sqldatasource 绑定 | 更新日期: 2023-09-27 17:59:43

在Asp.net C#中,我只是用字符串将一个控件绑定到一个返回一条记录(一行)的sqldatasource。

<asp:SqlDataSource ID="sqldatasource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ApplicationServices %>"
SelectCommand="SELECT * FROM [Data_Events] WHERE ([Entry_ID] = @Entry_ID)"
    UpdateCommand="UPDATE Data_Events SET Resolution = @Resolution, Date_Resolved =       @Date_Resolved WHERE (Entry_ID = @id)">
<SelectParameters>
  <tr>
<td>Author</td>
<td><%# DataBinder.Eval(sqldatasource1, "Author")%></td>
<td>Incident Date</td>
<td><%# DataBinder.Eval(sqldatasource1, "Date_Incident")%></td>

<%# DataBinder.Eval(sqldatasource1, "Name")%>

这个代码失败了,正确的方法是什么?

直接绑定到sqldatasource的数据

通常,如果您想直接数据绑定到SQLDatasource,您可以这样做:

SqlDataSource sds = GetMyDataSource();
ListView lv_MyData = new ListView();
lv_MyData.DataSource = sds;
lv_MyData.DataBind();

如果你想数据绑定到aspx页面上的DataSourceID,你可以这样做:

<asp:ListView ID="lv_MyData" runat="server" DataSourceId="sds_MyData">
...
</asp:ListView>
<asp:SqlDataSource ID="sds_MyData" .... />

如果你的问题没有更多的信息,我就无法告诉你更多。

更新:

在我看来,你这样做是错误的。我建议使用ADO.NET或类似工具从代码后面执行查询,并在aspx页面上设置文本框或标签的值。

SqlCommand文档末尾的示例提供了一个极好的示例,说明如何从查询到输出结果。我建议从那里开始:

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.aspx

(这是即兴的,如果需要,我可以用特定的细节来支持它)

DataSource控件公开一个记录或对象的集合,DataBinder期望对该集合进行迭代。在您的示例中,Eval()方法将希望从集合中的当前索引中检索"Name"字段。

我假设您正试图绑定到一个控件,如标签或文本框,而不是一个将在DataSource上迭代的模板化控件。在这种情况下,DataBinder.Eval()将从当前索引中查找"Name"字段,但由于没有上下文,因此没有有效的当前索引。

如果这没有意义,你需要澄清,请回复。如果需要,我会详细说明。

更新:

在示例代码中,您得到了一个表中的一行。如果没有围绕它的某种模板化控件(如中继器),就没有绑定的上下文。这就像在不指定从哪个元素检索值的情况下,向集合对象请求其某个元素的值。

您需要在代码隐藏中调用DataSource控件的Select方法,使其执行SelectCommand。完成后,就可以访问结果数据,但如何访问取决于DataSource是处于DataSet模式还是DataSource模式。

这里-我写了一篇关于它的文章:将数据从SqlDataSource绑定到标签