2011-02-01 12 views
0

は、私は、次のフィールドダイナミックGridViewのドロップダウンは

講義ID、講師NAME、サブジェクトとGridViewのは、挿入するためのリンクボタンが含まれ、編集とDELETE.what私がクリックしたときに、私は 必要があり、EDIT列を題材とするGridViewを持って一覧表示しますサブジェクトを選択するためのDROPDOWNリストが含まれている必要があります。 GridView行がEDITモードまたはINSERTモードでない場合、DROPDOWNは表示されず、講師が教えた科目のみが表示されます。以下に示すように

+2

これまでのデータコードとマークアップを表示できますか?質問に明確な目的で答えるのは難しいです。 – jwiscarson

答えて

1

これは、件名欄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> 

あなたは既にEDIT、INSERTを呼び出すと機能を削除するには、ButtonField列を追加している場合があります。

1

この種のデータバインディングを行うことの秘訣は、講義ID、講師名とサブジェクトID、およびサブジェクトのリストだけを持つ2つのデータソースを使用することです。これは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> 
関連する問題