编辑和只读模式下拉列表

时间:2010-10-11 15:12:00

标签: asp.net

您好我在编辑模式和只读模式下有一个下拉列表。如果用户上传图片,我希望他们为上传的图片选择一个类别,并将其显示在网格视图中,如下所示。(见下图)。 当我在编辑和项目模板模式中包含“SelectedValue ='<%#Bind(”CategoryID“)”时,我收到此错误“'PictureReadOnlyCategories'有一个无效的SelectedValue,因为它在项目列表中不存在。 参数名称:值“

当我从编辑和项目模板中删除“SelectedValue ='<%#Bind(”CategoryID“)”时,我会在下面的图片中获得结果(屏幕截图)。如果您可以看到下面的图片没有被选中,那么它只显示 - 无类别 - 即使我为图片选择了一个类别。

我想在上传图片并选择i类别时,在gridview上显示。错误消息的代码如下:

                                           

            <EditItemTemplate>
                <asp:DropDownList ID="pictureEditCategories" runat="server" 
                    AppendDataBoundItems="True"
              DataSourceID="categoriesDataSource" 
                    DataTextField="Name" DataValueField="CategoryID" 
                    SelectedValue='<%# Bind("CategoryID") %>' ValidationGroup="PictureEdit" >
                    <asp:ListItem Value="" Text="--No Category -- "/>
                </asp:DropDownList>
            </EditItemTemplate>

            <ItemTemplate>
                <asp:DropDownList ID="PictureReadOnlyCategories" runat="server" 
                    AppendDataBoundItems="True" DataSourceID="categoriesDataSource" 
                    DataTextField="Name" DataValueField="CategoryID" Enabled="False" 
                    SelectedValue='<%# Bind("CategoryID") %>' ValidationGroup="PictureEdit" 
                     >
                    <asp:ListItem 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>

当我删除SelectedValue ='&lt;%#Bind(“CategoryID”)%&gt;'时从项目和编辑模板,我得到下面的图片的结果。 我将非常感谢你的帮助。

请您编辑代码或向我解释,因为我还在学习ASP.net

alt text

1 个答案:

答案 0 :(得分:-1)

回答问题

您使用参数化查询定义了一个DataSource,其中包含两个参数:

@CategoryID @UserID

但是,您似乎只是通过控制参数填充其中一个参数。

  

修复此问题应该很容易,因为您已经从其他DataSource中的查询字符串变量中提取了UserID。您应该能够将QueryStringParameter复制到您的照片DataSource的SelectParameters列表中。突出显示如下:

     

您还可以处理数据源的Selecting事件,并以这种方式在查询中以编程方式设置UserID,但前面提到的选项最简单。我只是想让你知道你的所有选择。