2012-02-14 84 views
0

我在更新DetailsView控件上的事件时遇到问题。将值从下拉列表传递到UpdateParameters集合时,它始终将字段parentID设置为0。我知道它发现事件中的控件,但我甚至不能在我的示例中将默认值设置为“1”,所以它与UpdateParameters属性有关可以告诉我我做错了什么以及如何修复它请UpdateParameters始终设置为0

protected void DetailsView1_ItemUpdating(object sender, DetailsViewUpdateEventArgs e) 
{ 
    DropDownList forumGroup = DetailsView1.FindControl("DropDownList2") as DropDownList; 
    string value = forumGroup.SelectedValue.ToString(); 
    ObjectDataSource3.UpdateParameters["parentID"].DefaultValue = "1" // always is 0; 
} 


    public int UpdateForumByID(int forumID, string title, string url, string description, 
     string imageUrl, int parentID, int importance, bool moderated, bool active) 
    { 
     ObjectContext context = new ObjectContext("name=CMSEntities"); 
     ObjectSet<CMSModel.Forums> forums = context.CreateObjectSet<CMSModel.Forums>(); 
     // here forum is null 
     CMSModel.Forums forum = forums.FirstOrDefault(x => x.ForumID == forumID); 
     forum.Title = title; 
     forum.Url = url; 
     forum.Description = description; 
     forum.ImageUrl = imageUrl; 
     forum.ParentID = parentID; 
     forum.Importance = importance; 
     forum.Moderated = moderated; 
     forum.Active = active; 

     int affectedRows = context.SaveChanges(); 

     return affectedRows; 
    } 

标记:`

 <asp:ObjectDataSource ID="ObjectDataSource3" runat="server" 
      SelectMethod="GetForumByID" TypeName="CMS.Framework.Forums" 
      UpdateMethod="UpdateForumByID"> 
      <SelectParameters> 
       <asp:ControlParameter ControlID="GridView1" Name="forumID" 
        PropertyName="SelectedValue" Type="Int32" /> 
      </SelectParameters> 
      <UpdateParameters> 
       <asp:Parameter Name="forumID" Type="Int32" /> 
       <asp:Parameter Name="title" Type="String" /> 
       <asp:Parameter Name="url" Type="String" /> 
       <asp:Parameter Name="description" Type="String" /> 
       <asp:Parameter Name="imageUrl" Type="String" /> 
       <asp:Parameter Name="parentID" Type="Int32" /> 
       <asp:Parameter Name="parentID" Type="Int32" /> 
       <asp:Parameter Name="importance" Type="Int32" /> 
       <asp:Parameter Name="active" Type="Boolean" /> 
      </UpdateParameters> 
     </asp:ObjectDataSource> 


     <asp:DetailsView ID="DetailsView1" runat="server" 
      AutoGenerateRows="False" 
      DataKeyNames="ForumID" 
      DataSourceID="ObjectDataSource3" 
      DefaultMode="Insert" 
      OnDataBound="DetailsView1_DataBound" 
      OnItemCommand="DetailsView1_ItemCommand" 
      OnItemUpdated="DetailsView1_ItemUpdated"> 
      <Fields> 
       <asp:BoundField DataField="ForumID" HeaderText="ForumID" 
        SortExpression="ForumID" ReadOnly="true" InsertVisible="false" /> 
       <asp:BoundField DataField="AddedBy" HeaderText="AddedBy" 
        SortExpression="AddedBy" ReadOnly="true" InsertVisible="false" /> 
       <asp:BoundField DataField="AddedDate" HeaderText="AddedDate" 
        SortExpression="AddedDate" ReadOnly="true" InsertVisible="false" /> 
       <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" /> 
       <asp:BoundField DataField="Url" HeaderText="Url" SortExpression="Url" /> 
       <asp:BoundField DataField="Description" HeaderText="Description" 
        SortExpression="Description" /> 
       <asp:BoundField DataField="ImageUrl" HeaderText="ImageUrl" 
        SortExpression="ImageUrl" /> 
       <asp:TemplateField HeaderText="Forum Group:" InsertVisible="true" SortExpression="ForumGroup"> 
        <InsertItemTemplate> 
         <asp:DropDownList ID="DropDownList2" runat="server" 
          DataSourceID="ObjectDataSource4" DataTextField="Key" DataValueField="Value"> 
         </asp:DropDownList> 
         <asp:ObjectDataSource ID="ObjectDataSource4" runat="server" 
          SelectMethod="GetDisplayForumGroups" TypeName="CMS.Framework.Forums"> 
         </asp:ObjectDataSource> 
        </InsertItemTemplate> 
        <EditItemTemplate> 
         <asp:DropDownList ID="DropDownList2" runat="server" 
          DataSourceID="ObjectDataSource5" DataTextField="Key" DataValueField="Value"> 
         </asp:DropDownList> 
         <asp:ObjectDataSource ID="ObjectDataSource5" runat="server" 
          SelectMethod="GetDisplayForumGroups" TypeName="CMS.Framework.Forums"> 
         </asp:ObjectDataSource> 
        </EditItemTemplate> 
       </asp:TemplateField> 
       <asp:BoundField DataField="Importance" HeaderText="Importance" 
        SortExpression="Importance" /> 
       <asp:CheckBoxField DataField="Moderated" HeaderText="Moderated" 
        SortExpression="Moderated" /> 
       <asp:CheckBoxField DataField="Active" HeaderText="Active" 
        SortExpression="Active" /> 
       <asp:BoundField DataField="UpdatedBy" HeaderText="UpdatedBy" 
        SortExpression="UpdatedBy" ReadOnly="true" InsertVisible="false" /> 
       <asp:BoundField DataField="UpdatedDate" HeaderText="UpdatedDate" 
        SortExpression="UpdatedDate" ReadOnly="true" InsertVisible="true" /> 
       <asp:TemplateField> 
        <InsertItemTemplate> 
         <asp:LinkButton ID="lnkInsert" runat="server" CommandName="Insert" Text="Insert"></asp:LinkButton> 
         <asp:LinkButton ID="lnkCancel" runat="server" CommandName="Cancel" Text="Cancel"></asp:LinkButton> 
        </InsertItemTemplate> 
        <EditItemTemplate> 
         <asp:LinkButton ID="lnkUpdate" runat="server" CommandName="Update" Text="Update"></asp:LinkButton> 
         <asp:LinkButton ID="lnkCancel" runat="server" CommandName="Cancel" Text="Cancel"></asp:LinkButton> 
        </EditItemTemplate> 
       </asp:TemplateField> 
      </Fields> 
     </asp:DetailsView> 

回答

0

你就不能在参数直接绑定到所选择的值你需要什么? The docs建议是这样:

<asp:controlparameter name="anID" controlid="DropDownList1" propertyname="SelectedValue" /> 
+0

的下拉列表是在DetailsView我得到这个错误找不到控制“DropDownList2”在ControlParameter“的parentID”。 – ONYX 2012-02-14 00:45:46

+0

你必须手动从下拉列表中传递一个参数,详情请查看更新事件。更新事件始终将默认parentID参数设置为0.我已更新我的代码以向您显示我的意思 – ONYX 2012-02-14 00:56:54

+0

我的错误我没有在detailsview中添加事件。我需要关注焦点 – ONYX 2012-02-14 01:00:33