2009-07-21 68 views
1

我有一個AjaxControlToolkit ReorderList由一個SqlDataSource綁定到表與下面的模式:ASP.NET ReorderList - 更新失敗

 
OrgID MilestoneID Name Priority 

的優先級字段連接到ReorderList爲SortOrderField。 OrgID特定於登錄的每個用戶。思路是每個Org都有不同的里程碑列表。

我沒有使用任何代碼。在EditItemTemplate中,我有兩個用於更新和取消的ImageButton。當我單擊更新時,里程碑的名稱會更新,但優先級會被設置爲空。我無法弄清楚爲什麼會發生這種情況。

下面是ReorderList及其SqlDataSource的源代碼:

<cc1:ReorderList ID="ReorderList1" runat="server" AllowReorder="True" 
      CssClass="reorderStyle" DataKeyField="MilestoneID" 
      DataSourceID="SqlDataSource2" 
      OnItemDataBound="ReorderList1_ItemDataBound" 
      OnItemReorder="ReorderList1_ItemReorder" PostBackOnReorder="True" 
        SortOrderField="Priority" Width="400px"> 
        <ItemTemplate> 
         <asp:ImageButton ID="ImageButton2" runat="server" CommandName="Edit" 
          ImageUrl="~/Images/edit.gif" /> 
         <asp:Label ID="Label1" runat="server" 
        Text='<%# Eval("Name") %>' 
        ForeColor="Navy" Font-Names="Arial" /> 
        </ItemTemplate> 
        <DragHandleTemplate> 
         <img src="../Images/GrabIcon.GIF" style="cursor: move" />&nbsp; 
        </DragHandleTemplate> 
        <InsertItemTemplate> 
        </InsertItemTemplate> 
        <EmptyListTemplate> 
         <asp:Label ID="Label4" runat="server" Font-Bold="True" Font-Italic="False" ForeColor="Red" 
        Text="There are no Associated Milestones currently in the database"></asp:Label> 
        </EmptyListTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Name") %>'></asp:TextBox> 
         <asp:ImageButton ID="ImageButton1" runat="server" CommandName="Update" 
          ImageUrl="~/Images/save.gif" /> 
         &nbsp; 
         <asp:ImageButton ID="ImageButton3" runat="server" CommandName="Cancel" 
          ImageUrl="~/Images/cancel.gif" /> 
        </EditItemTemplate> 
       </cc1:ReorderList> 
       <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
        ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" 
        DeleteCommand="DELETE FROM [Milestones] WHERE [MilestoneID] = @MilestoneID" 
        InsertCommand="INSERT INTO [Milestones] ([OrgID], [Name], [Priority]) VALUES (@OrgID, @Name, @Priority)" 
        SelectCommand="SELECT MilestoneID, [Name], [Priority] FROM [Milestones] WHERE OrgID = @OrgID ORDER BY [Priority]" 

        UpdateCommand="UPDATE [Milestones] SET [Name] = @Name, Priority = @Priority WHERE [MilestoneID] = @MilestoneID"> 
        <SelectParameters> 
         <asp:ProfileParameter Name="OrgID" PropertyName="OrgID" /> 
        </SelectParameters> 
        <DeleteParameters> 
         <asp:Parameter DbType="Guid" Name="MilestoneID" /> 
        </DeleteParameters> 
        <UpdateParameters> 
         <asp:Parameter Name="Priority" Type="Int32" /> 
         <asp:Parameter Name="Name" Type="String" /> 
         <asp:Parameter DbType="Guid" Name="MilestoneID" /> 
        </UpdateParameters> 
        <InsertParameters> 
         <asp:ProfileParameter Name="OrgID" PropertyName="OrgID" /> 
         <asp:Parameter Name="Name" Type="String" /> 
         <asp:Parameter Name="Priority" Type="Int32" /> 
        </InsertParameters> 
       </asp:SqlDataSource> 

任何想法,爲什麼名稱會得到更新,但優先級不會?

+0

之前曾經有類似的問題,並且放棄了這個控制。每次我勇敢地回到AjaxControlToolkit,我都感到非常失望和沮喪。我通常最終會滾動自己的。 – JoshJordan 2009-07-21 20:34:50

回答

2

我還沒有使用ReoRder列表控件,但會想到您仍然需要綁定到優先級,才能將其發送到您的DataSource?例如。

<asp:TextBox ID="TextBoxPriorty" runat="server" Text='<%# Bind("Priority") %>'></asp:TextBox> 
+0

這工作。 WTH?這看起來確實很麻煩,但它有效,所以+1! – 2009-07-21 20:45:05