“DataSource”属性不能通过声明式设置。

4
我有以下代码,它会报错,但我找到的解决方案都说,“你尝试使用DataSourceID而不是DataSource了吗?”并没有指示应该使用什么作为DataSourceID的值。
<Columns>
    <asp:BoundColumn DataField="id" SortExpression="id" HeaderText="ID" ItemStyle-CssClass="dgCells"></asp:BoundColumn>
      <asp:BoundColumn DataField="first_name" SortExpression="first_name" HeaderText="First" ItemStyle-CssClass="dgCells"></asp:BoundColumn>
      <asp:BoundColumn DataField="last_name" SortExpression="last_name" HeaderText="Last" ItemStyle-CssClass="dgCells"></asp:BoundColumn>
      <asp:BoundColumn DataField="login_pw" HeaderText="Password" ItemStyle-CssClass="dgCells"></asp:BoundColumn>
      <asp:TemplateColumn HeaderText="Race">
        <ItemTemplate>
          <%# DataBinder.Eval(Container.DataItem, "race_name") %>
        </ItemTemplate>
        <EditItemTemplate>
          <asp:DropDownList runat="server" id="ddlRaces" DataValueField="race_id" DataTextField="race_name" >>>DataSourceID=""<<< />
        </EditItemTemplate>
      </asp:TemplateColumn>
    <asp:EditCommandColumn EditText="Edit" CancelText="Cancel" UpdateText="Ok"></asp:EditCommandColumn>
</Columns>

我应该插入什么值到DataSourceID=""中?

如果可能的话,您应该使用GridView而不是DataGrid。 - Magnus
GridView控件是否有很大的不同或更容易使用?如果有影响的话,我正在尝试在WDE2010中使用.NET 4.0。 - Skittles
GridView是在.NET 2.0中引入的,GridView与Datagrid:http://msdn.microsoft.com/en-us/library/05yye6k9.aspx。 - Magnus
3个回答

4

DataSourceID 应该设置为页面上继承自 DatasourceControl 的控件的 ID,例如 SqlDatasource,如果您想从 SQL 数据库填充网格

要将下拉列表绑定到 GridView 中

protected void GV_RowDataBound(object sender, GridViewRowEventArgs e)
{
  if(e.Row.RowType == DataControlRowType.DataRow)
  {  
    var ddl = (DropDownList)item.FindControl("ddlRaces");
    ddl.Datasource = GetRaces();
    ddl.DataBind();
  }
}

我想我还是不太明白。我需要的是在编辑模式下为该行出现一个下拉列表,其中列表中的项目显示来自lu_races表的值。网格显示了我绑定到它的所有数据,但是我需要为下拉列表单独使用数据源吗? - Skittles
你应该在GridView的OnRowDatabound事件中使用DropDown的DataSource属性来绑定它。 - Magnus
@Magnus - 在这种情况下,更加清晰的做法可能是在ddl的DataBinding事件中设置ddl.DataSource,并在Page_Load中只调用.DataBind()。 - O.O

4

DataSourceID 就是你页面上数据源元素的 ID,比如 ObjectDataSource 或者 SqlDataSource

DataSource 属性用于从后端代码绑定对象集合。


2
是的,我不小心使用了 DataSource 而不是 DataSourceID。 - PeterX

1

对于快速而简单的应用程序,您可以直接在aspx页面上使用da DataSourceControl。然后,您可以将数据绑定控件的DataSourceId属性设置为此控件。对于较大的应用程序,不建议使用此技术,因为您的用户界面和业务或数据访问代码之间没有分离。

<asp:SqlDataSource
    id="SqlDataSource1"
    runat="server"
    DataSourceMode="DataReader"
    ConnectionString="<%$ ConnectionStrings:MyNorthwind%>"
    SelectCommand="SELECT FirstName, LastName, Title FROM Employees">
</asp:SqlDataSource>

<asp:GridView
    id="GridView1"
    runat="server"
    DataSourceID="SqlDataSource1">
</asp:GridView>

更好的方法是使用对象数据源,您可以访问库中的任何 .net 类。
<asp:ObjectDatasource
    id="ObjectDataSource1"
    runat="server"
    selectmethod="GetAllEmployees"
    typename="Samples.AspNet.EmployeeLogic" />

第三个选项是使用DataSource属性,该属性主要在代码后台类的Page_Load事件中设置。

好的,这个方法看起来值得一试,但是由于你所说的“快速且简单”的标签意味着它更多地是一个为了例子而采用的基本方法,那么Magnus的建议是否是正确的呢? - Skittles
是的,没错。但是你的问题是关于DataSourceId而不是如何绑定DropDownList。抱歉我没有意识到这一点。 - slfan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接