【问题标题】:Dynamic GridView DropDown Lists动态 GridView 下拉列表
【发布时间】:2011-02-01 15:36:36
【问题描述】:

我有一个带有以下字段的网格视图

LECTURE ID、LECTURER NAME、SUBJECTS 和 gridview 包含插入、编辑和删除的链接按钮。我 需要的是,当我单击时,编辑主题列应包含下拉列表以选择主题。 如果 GridView 行不在 EDIT 模式或 INSERT 模式下,则不应显示 DROPDOWN 并仅显示讲师教授的主题。

【问题讨论】:

  • 您能向我们展示您目前所拥有的代码和标记吗?没有明确目标的问题很难回答。

标签: asp.net gridview drop-down-menu


【解决方案1】:

这可以通过将 SUBJECT 列设为 TemplateField 来完成,如下所示:

<asp:TemplateField Header="Subject">
                    <EditItemTemplate>
                        <asp:DropDownList ID="subjectDDl" runat="server"></asp:DropDownList>
                    </EditItemTemplate>
                    <ItemTemplate>
                        <asp:Label ID="subjectLabel" runat="server"></asp:Label>
                    </ItemTemplate>
                </asp:TemplateField>

您可能已经添加了 ButtonField 列来调用 EDIT、INSERT 和 DELETE 功能。

【讨论】:

    【解决方案2】:

    进行这种数据绑定的技巧是使用两个数据源,一个带有讲座 ID、讲师姓名和主题 ID,另一个带有主题列表。您可以使用任何 DataSource 控件执行此操作 - 这是使用 SqlDataSource 的演示:

    <!-- First data source is the main data source for the gridview -->
    <asp:SqlDataSource runat="server" id="LectureDataSource" 
    SelectCommand="SELECT l.LectureId, l.Lecturer, l.SubjectId, s.Subject FROM Lecture l INNER JOIN Subject s ON l.SubjectId = s.SubjectID" 
    UpdateCommand="UPDATE Lecture SET Lecturer = @Lecturer, SubjectId = @SubjectId"
    DeleteCommand="DELETE FROM Lecture WHERE LectureId = @LectureId" InsertCommand="INSERT INTO Lecture (Lecturer, SubjectId) VALUES (@Lecturer, @SubjectID)"
    >
    <DeleteParameters>
        <asp:ControlParameter ControlID="LectureGridView" Name="LectureId" 
            PropertyName="SelectedValue" />
    </DeleteParameters>
    <UpdateParameters>
        <asp:Parameter Name="Lecturer" />
        <asp:Parameter Name="SubjectId" />
    </UpdateParameters>
    </asp:SqlDataSource>
    
    <!-- Second data source is the data source for the Subject dropdownlist -->
    <asp:SqlDataSource runat="server" ID="SubjectDataSource"  
     SelectCommand="SELECT SubjectId, Subject FROM Subject ORDER BY SubjectId" />
    
    <asp:GridView runat="server" AutoGenerateColumns="False" DataSourceID="LectureDataSource"
        ID="LectureGridView" DataKeyNames="LectureId" >
        <!-- Setting the DataKeyNames property allows us to delete by using the SelectedValue -->
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton Text="Edit" runat="server" CommandName="Edit" />&nbsp;
                    <asp:LinkButton Text="Delete" runat="server" CommandName="Delete" />
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:LinkButton Text="Update" runat="server" CommandName="Update" />
                    <asp:LinkButton Text="Cancel" runat="server" CommandName="Cancel" />
                </EditItemTemplate>
                <ItemStyle HorizontalAlign="Center" />
            </asp:TemplateField>
            <asp:BoundField DataField="LectureId" HeaderText="Lecture Id" ReadOnly="true" />
            <asp:TemplateField HeaderText="Lecturer">
                <ItemTemplate>
                    <asp:Label Text='<%# Bind("Lecturer") %>' runat="server" ID="LecturerLabel" />
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="LecturerEditTextBox" runat="server" Text='<%# Bind("Lecturer") %>'></asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <!-- The label is bound to the subject text field from the LectureDataSource -->
                    <asp:Label ID="SubjectLabel" runat="server" Text='<%# Bind("Subject")  %>' />
                </ItemTemplate>
                <EditItemTemplate>
                    <!-- In Edit mode the dropdownlist is bound to the SubjectDataSource, but we also set the text value from the LectureDataSource -->
                    <asp:DropDownList ID="SubjectEditDropDownList" runat="server" DataSourceID="SubjectDataSource"
                        DataTextField="Subject" DataValueField="SubjectId" Text='<%# Bind("SubjectId") %>'>
                    </asp:DropDownList>
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-05
      • 2023-03-15
      • 1970-01-01
      • 2012-11-13
      相关资源
      最近更新 更多