2011-01-25 50 views
2

作爲關於GridView和DotNetNuke的previous question的後續工作,我在讓事情正確行事時遇到了一些麻煩。現在,我已經在我的ascx文件的簡單GridView和我結合我的.cs數據到GridView文件中像這樣:DotNetNuke:沒有找到GridView的ObjectDataSource

DiscoveryController objDiscoverys = new DiscoveryController(); 
List<DiscoveryInfo> lstDiscoveries = objDiscoverys.GetDiscoverys(ModuleId); 

grdDiscoverys.DataSource = lstDiscoveries; 
grdDiscoverys.DataBind(); 

這工作。但是,我在tutorial中看到了另一種方法,它在控制器中定義了<asp:ObjectDataSource>,這似乎允許Designer執行更多智能操作,例如通過複選框添加正在運行的Delete按鈕。在本教程的後面,我也看到了內聯編輯,這是我想要的功能。

所以我決定給它一個鏡頭。即:

<asp:ObjectDataSource ID="objDataSource" runat="server" TypeName="MyCompany.Modules.Discovery.DiscoveryController" /> 

爲Bin文件夾我的dll文件被命名爲MyCompany.Modules.Discovery(相匹配的組件名稱和默認命名空間我在C#項目設置),這非常有意義。正如教程所說,然後我使用Designer來嘗試將數據源綁定到GridView。

但是,我收到一條錯誤消息,指出它無法加載。命名空間名稱和類名匹配,並且我可以清楚地將它與代碼隱藏綁定,所以給出了什麼?

編輯:跟進。經過一番實驗後,我發現雖然Designer無法看到我的模塊,但.ascx模板本身可以。在我的.ascx文件把這個似乎工作...大部分:

<asp:ObjectDataSource ID="objDataSource" runat="server" TypeName="MyCompany.Modules.Discovery.DiscoveryController" SelectMethod="GetDiscoverys" UpdateMethod="UpdateDiscovery" DeleteMethod="DeleteDiscovery"> 
    <SelectParameters> 
     <asp:QueryStringParameter Name="ModuleId" QueryStringField="mid" /> 
    </SelectParameters> 
    <UpdateParameters> 
     <asp:QueryStringParameter Name="ModuleId" QueryStringField="mid" /> 
    </UpdateParameters> 
    <DeleteParameters> 
     <asp:QueryStringParameter Name="ModuleId" QueryStringField="mid" /> 
    </DeleteParameters> 
</asp:ObjectDataSource> 
<asp:GridView ID="grdDiscoverys" runat="server" DataSourceID="objDataSource" EnableModelValidation="True" AutoGenerateColumns="false" AutoGenerateEditButton="true" AutoGenerateDeleteButton="true" DataKeyNames="ItemId"> 
    <Columns> 
     <asp:BoundField DataField="ItemId" HeaderText="#" ReadOnly="true" /> 
     <asp:BoundField DataField="Title" HeaderText="Title" /> 
     <asp:BoundField DataField="Image" HeaderText="Image URL" /> 
     <asp:BoundField DataField="Link" HeaderText="Link" /> 
    </Columns> 
</asp:GridView> 

神奇......它看起來就像我反映大部分什麼樣的設計師將已添加的功能...除了一件十幾歲的小東西。自動更新不會更新。

ObjectDataSource 'objDataSource' could not find a non-generic method 'UpdateDiscovery' that has parameters: ModuleId, Title, Image, Link, ItemId. 

當然這是行不通的:

更具體地講,當我嘗試更新的字段我得到這個消息!該方法的簽名是這樣的:

public void UpdateDiscovery(DiscoveryInfo objDiscovery) 

在這一點上,我很接近得到的東西的工作,我可以品嚐它,和DAL-被該死的,我要改變的功能,所以它需要這五個確切的參數而不是數據對象。然而,我上面引用的教程似乎在某種程度上說服了自動更新來傳遞一個數據對象,所以我很好奇它是如何擺脫它的。

回答

0

更改對象數據源的聲明,以配合您的更新方法:

public void UpdateDiscovery(DiscoveryInfo objDiscovery)

使用在更新參數聲明一個參數:

<UpdateParameters> 
     <asp:Parameter Name="objDiscovery" /> 
    </UpdateParameters> 
使用對象數據源的更新事件來從現有的控制設置對象和分配它到參數的默認值。

祝你好運

相關問題