【问题标题】:'DataSource' property cannot be set declaratively'DataSource' 属性不能以声明方式设置
【发布时间】:2011-08-29 04:30:15
【问题描述】:

我很难找到比 Google 为这个问题提供的解决方案更清晰的解决方案。我有以下代码引发此错误,但我找到的解决方案说:“您是否尝试过 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="" 值中插入什么。请详细一点,因为我仍然被这些东西弄湿了。

谢谢。 :)

【问题讨论】:

  • 如果可能,您应该使用 GridView 而不是 DataGrid
  • GridView 有那么大的不同还是更容易使用?这是我尝试在 WDE2010 中使用的 .NET 4.0,如果这很重要的话。
  • GridView 是在 .NET 2.0 中引入的,GridView 与 Datagrid:msdn.microsoft.com/en-us/library/05yye6k9.aspx
  • 非常感谢您的帮助,马格努斯。

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


【解决方案1】:

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

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

【讨论】:

  • 我想我还是不明白。我需要的是在该行的编辑模式下显示一个下拉列表,其中包含列表中的项目以显示 lu_races 表中的值。网格显示了我绑定的所有数据,但我需要为下拉列表单独的数据源吗?
  • 您应该在 GridView 的 OnRowDatabound 事件中使用它的 DataSource 属性绑定 DropDown。
  • @Magnus - 在这种情况下,在 ddl 的 DataBinding 事件中设置 ddl.DataSource 并在 Page_Load 中调用 .DataBind() 可能会更简洁。
【解决方案2】:

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

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

【讨论】:

  • 是的,我不小心用了DataSource而不是DataSourceID。
【解决方案3】:

对于快速而肮脏的应用程序,您可以直接在您的 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 的建议是否是正确的方法,因为您的“快速和肮脏”标签意味着它更像是一种基本方法,例如为了?
  • 是的,没错。但是您的问题是关于 DataSourceId 而不是关于如何绑定 DropDownList。抱歉,我没有意识到这一点。
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 2011-01-03
  • 1970-01-01
  • 2011-01-13
相关资源
最近更新 更多