2010-10-04 18 views
1

我遇到了一个问题,即使用只读模式下的项目字段模板来填充具有来自数据库的值的DropDownList控件。我很欣赏详细的解释,因为我是ASP.NET的新手。下面是代码和我得到的错误:下拉列表不会从数据库中polpuate值

'PictureReadOnlyCategories'有一个SelectedValue,它是无效的,因为它不存在于项目列表中。 参数名称:值说明:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关该错误的更多信息以及源代码的位置。

异常详细信息:System.ArgumentOutOfRangeException:'PictureReadOnlyCategories'具有无效的SelectedValue,因为它不存在于项目列表中。 参数名:价值

这个代码是:

<asp:SqlDataSource ID="categoriesDataSource" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
    SelectCommand ="SELECT [CategoryID], [Name] FROM [Categories] WHERE ([UserId] = @UserId)"> 
    <SelectParameters> 
     <asp:ControlParameter ControlID="UserIdValue" 
           Name="UserId" 
           PropertyName="Text" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

<asp:Label ID="UserIdValue" runat="server" Visible="False"></asp:Label> 

<asp:GridView ID="gvPictures" 
       runat="server" 
       AllowPaging="True" 
       AllowSorting="True" 
       AutoGenerateColumns="False" 
       CellPadding="4" 
       DataKeyNames="PictureID" 
       DataSourceID="picturesDataSource" 
       ForeColor="#333333" 
       GridLines="None" Width="800px"> 
    <AlternatingRowStyle BackColor="White" /> 
    <Columns> 
     <asp:CommandField ShowDeleteButton="True" 
          ShowEditButton="True" 
          ValidationGroup="PictureEdit" /> 
     <asp:TemplateField HeaderText="Category" 
          SortExpression="CategoryID"> 
      <EditItemTemplate> 
       <asp:DropDownList ID="pictureEditCategories" 
            runat="server" 
            AppendDataBoundItems="True" 
            DataSourceID="categoriesDataSource" 
            DataTextField="Name" 
            DataValueField="CategoryID" 
            SelectedValue='<%# Bind("CategoryID") %>'> 
        <asp:ListItem Value="" Text="--Select Category -- "/> 
       </asp:DropDownList> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:DropDownList ID="PictureReadOnlyCategories" 
            runat="server" 
            AppendDataBoundItems="True" 
            DataSourceID="categoriesDataSource" 
            DataTextField="Name" 
            DataValueField="CategoryID" 
            Enabled="False" 
            SelectedValue='<%# Bind("CategoryID") %>'> 
        <asp:ListItem Selected="True" Value="">-- No Category --</asp:ListItem> 
       </asp:DropDownList> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Title" SortExpression="Title"> 
      <EditItemTemplate> 
       <asp:TextBox ID="TextBox1" 
          runat="server" 
          EnableViewState="False" 
          Text='<%# Bind("Title") %>'> 
       </asp:TextBox> 
       <asp:RequiredFieldValidator ID="RequiredFieldValidator4" 
              runat="server" 
              ControlToValidate="TextBox1" 
              Display="Dynamic" 
              ErrorMessage="must enter a title" 
              ValidationGroup="PictureEdit"> 
       </asp:RequiredFieldValidator> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label1" 
          runat="server" 
          Text='<%# Bind("Title") %>'> 
       </asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Description" SortExpression="Description"> 
      <EditItemTemplate> 
       <asp:TextBox ID="TextBox2" 
          runat="server" 
          Columns="25" 
          Rows="4" 
          Text='<%# Bind("Description") %>' 
          TextMode="MultiLine"> 
       </asp:TextBox> 
       <asp:RequiredFieldValidator ID="RequiredFieldValidator5" 
              runat="server" 
              ControlToValidate="TextBox2" 
              Display="Dynamic" 
              ErrorMessage="you must enter a description" 
              ValidationGroup="PictureEdit"> 
       </asp:RequiredFieldValidator>< 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label2" 
          runat="server" 
          Text='<%# Bind("Description") %>'> 
       </asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="Date Added" SortExpression="UploadedOn"> 
      <EditItemTemplate> 
       <asp:Label ID="Label4" 
          runat="server" 
          Text='<%# Bind("UploadedOn") %>'> 
       </asp:Label> 
      </EditItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label3" 
          runat="server" 
          Text='<%# Bind("UploadedOn") %>'> 
       </asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:ImageField DataImageUrlField="PictureID" 
         DataImageUrlFormatString="~/UploadedImages/{0}.jpg" 
         HeaderText="Image" 
         ReadOnly="True"> 
      <ControlStyle Width="100px" /> 
     </asp:ImageField> 
    </Columns> 
    <EditRowStyle BackColor="#2461BF" /> 
    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
    <RowStyle BackColor="#EFF3FB" /> 
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" /> 
    <SortedAscendingCellStyle BackColor="#F5F7FB" /> 
    <SortedAscendingHeaderStyle BackColor="#6D95E1" /> 
    <SortedDescendingCellStyle BackColor="#E9EBEF" /> 
    <SortedDescendingHeaderStyle BackColor="#4870BE" /> 
</asp:GridView> 
+1

如果您希望任何人花费10分钟来帮助回答您的问题,那么您至少可以花10分钟使其可读。 – 2010-10-04 04:30:49

回答

1

你需要确保你有约束力的PictureReadOnlyCategories DDL来填充项目之前你要绑定所选项目。问题看起来像事情正在进行的顺序,这就是全部。如果您尝试选择不存在的DDL中的项目,则会出现该错误。

+0

感谢您的回复,即时通讯类型的新,所以我会感谢你的帮助解释给我代码 – onfire4JesusCollins 2010-10-04 12:27:23

相关问题