2011-05-19 115 views
4

我试图找到一个比谷歌已经解决了这个问题更清晰的解决方案有点困难。我有下面的代码抛出这个错误,但我发现的解决方案说,“你是否尝试过DataSourceID而不是DataSource?”没有迹象表明DataSourceID值应该使用什么。'DataSource'属性不能设置为声明

...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 =“”的值。请详细一点,因为我仍然对这些东西感到厌烦。

谢谢。 :)

+0

如果可能的话,您应该使用GridView代替DataGrid – Magnus 2011-05-19 20:33:11

+0

GridView与GridView有很大不同或更易于使用吗?这是我尝试在WDE2010中使用的.NET 4.0,如果这很重要的话。 – Skittles 2011-05-19 21:05:02

+0

GridView是在.NET 2.0,GridView与Datagrid中引入的:http://msdn.microsoft.com/en-us/library/05yye6k9.aspx – Magnus 2011-05-19 21:57:06

回答

3

DataSourceID应设置为,如果你想填充从SQL数据库

电网要下拉绑定在GridView

DatasourceControlSqlDatasource继承你的页面上的控件的ID
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(); 
    } 
} 
+0

我想我还是不明白。我需要的是使用列表中的项目在该行的编辑模式下显示下拉列表,以显示lu_races表中的值。网格显示了我绑定的所有数据,但是我需要一个单独的数据源作为下拉列表吗? – Skittles 2011-05-19 20:29:10

+0

您应该在GridView的OnRowDatabound事件中使用它的DataSource属性绑定DropDown。 – Magnus 2011-05-19 20:37:56

+0

@Magnus - 在这种情况下,在ddl的DataBinding事件中设置ddl.DataSource并仅调用Page_Load中的.DataBind()可能会更清晰。 – 2012-02-21 16:05:26

4

DataSourceID将会像ObjectDataSourceSqlDataSource你的页面上的数据源元素的ID。

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

+2

是的,我不小心使用了DataSource而不是DataSourceID。 – PeterX 2013-01-07 00:54:48

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事件。

+0

好的,这种方法似乎确实值得尝试,但是Magnus的建议是否正确,因为您的“快速与肮脏”标签意味着它更像是一个基本方法的例子。 – Skittles 2011-05-19 20:46:10

+0

是的,没错。但你的问题是关于DataSourceId而不是关于如何绑定DropDownList。对不起,我没有意识到这一点。 – slfan 2011-05-20 05:01:31