2011-05-19 117 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