无法以声明方式设置“DataSource”属性

时间:2011-05-19 20:08:03

标签: c# asp.net datagrid drop-down-menu

我试图找到一个比谷歌针对这个问题所产生的更清晰的解决方案有点困难。我有以下代码抛出此错误,但我发现的解决方案说,“你尝试过DataSourceID而不是DataSource吗?”没有迹象表明应该为DataSourceID值使用什么。

...leading code left out for brevity's sake
<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>
...trailing code left out for brevity's sake

所以,我来找你们问我应该在DataSourceID =“”值中插入什么。请大家详细说明,因为我仍然不知所措。

感谢。 :)

3 个答案:

答案 0 :(得分:4)

DataSourceID将是您网页上数据源元素的ID,如ObjectDataSourceSqlDataSource

绑定到代码隐藏中的对象集合时使用DataSource属性。

答案 1 :(得分:3)

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

在GridView中绑定DropDown

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();
  }
}

答案 2 :(得分: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事件中设置。