2009-04-16 34 views
2

親の子関係を持つ2つの列を表示する、かなり標準的なASP.NET GridViewがあります。関係は列Aと列Bの間のデータベースに存在しますが、GridViewはそれを実装しません。編集のためにグリッドビュー内にカスケードドロップダウンを追加するにはどうすればよいですか?

ユーザーが行を編集するように選択すると、2つのドロップダウンメニューが表示されます。 DropDownBには、DropDownAの値に基づいて使用可能なオプションが自動的に設定されます。 DropDownAが変更されると、現在のオプションを反映するためにDropDownBを更新する必要があります。グリッドに現在利用可能な

列:

- ColumnAID 
- ColumnADescription 
- ColumnBID 
- ColumnBDescription 

私は確かにしても、選択した行のイベントが、私はそれに応じてフィールドを編集することができ、モーダルポップアップを表示する可能性があり、グリッドの外でこれと同じ機能を実現することができますが、これをグリッドに保持したいと考えています。

答えて

1

このようにする必要があります。

1. GridViewの列エディタに移動します。また、TextBoxではなくDropDownListを表示する列をTemplateに変換します。

2.)GridView SmartTagに移動し、テンプレートを編集するオプションを選択します。 GridView列エディタでテンプレートに変換した列を選択します。

3.)この列には、すべてのビューのテンプレートがあります。編集ビューを選択します。これにはすでにTextBoxがあります。

4.)TxtBoxを削除し、そこにDropDownListを配置します。 ObjectDataSourceまたはSqlDataSourceを使用して、外部テーブルからデータを入力するようにDropDownListを構成する必要があります。値の小道具。 DropDownListのForeKeyTableのP.Keyに設定する必要があります。

5.)次に、SelectedValueフィールドをテーブルのForegin Keyにバインドします。バインドを使用すると、読み取り/書き込みへの双方向バインディングが実行されます.Evalを使用すると、読み込み専用のバインディングが実行され、デフォルト値のみが設定されます。

詳細については、linkをご覧ください。

LinkTxt:http://www.asp.net/learn/data-access/tutorial-20-cs.aspx

感謝。

これが役に立ちます。

+0

ありがとうございました。私は後でこれを実装しようとします。 – RSolberg

0

部分的な答えは、データソースに範囲があることです。それらをテンプレートの内部に作成すると、そのテンプレート用にのみ存在します。あなたがそれらをお互いに、そして同じスコープ内で依存させるなら、カスケードする必要があります。

2

以下の例は、ホリデーグループとホリデータイプの2つのドロップダウンを示しています。 Holiday Groupの選択に基づいて、ホリデータイプのドロップダウンがロードされます。 ここでキャッチするのは "true"に設定された自動ポストバックで、最初のドロップダウンのselectindex変更のイベントを定義します。OnSelectedIndexChanged="CboHolidayGroup_SelectedIndexChanged"
"("と ")"をそれぞれ "<"と ">"に置き換えます。
次のコードは、グリッドビュー内でドロップダウンをカスケード接続するために使用することができます。

デザイン

(asp:TemplateField HeaderText="(*) Holiday Group") 
    (ItemStyle CssClass="TEXTBOX_MEDIUM" /) 
    (EditItemTemplate) 
     (asp:DropDownList ID="CboHolidayGroup" CssClass="DROPDOWN_SMALL" runat="server" 
      DataTextField="holidaygroup" DataValueField="holiday_group_code_id" AutoPostBack="true" 
      OnSelectedIndexChanged="CboHolidayGroup_SelectedIndexChanged") 
     (/asp:DropDownList) 
     (asp:RangeValidator ID="RvHolidayGroup" runat="server" ControlToValidate="CboHolidayGroup" 
      Display="None" ErrorMessage="Please Select Holiday Group" MaximumValue="1000" 
      MinimumValue="1" SetFocusOnError="true" Type="Integer" ValidationGroup="VgrpUpdate") 
     (/asp:RangeValidator) 
    (/EditItemTemplate) 
    (ItemTemplate) 
     (asp:Label ID="LblHolidayGroup" CssClass="DROPDOWN_SMALL" runat="server" Text='<%# Eval("holidaygroup") %>')(/asp:Label) 
    (/ItemTemplate) 
    (FooterTemplate) 
     (asp:DropDownList ID="CboNewHolidayGroup" CssClass="DROPDOWN_SMALL" runat="server" 
      DataTextField="holidaygroup" DataValueField="holiday_group_code_id" Enabled="false" 
      AutoPostBack="true" OnSelectedIndexChanged="CboHolidayGroup_SelectedIndexChanged") 
     (/asp:DropDownList) 
     (asp:RangeValidator ID="RvNewHolidayGroup" runat="server" ControlToValidate="CboNewHolidayGroup" 
      Display="None" ErrorMessage="Please Select Holiday Group" MaximumValue="1000" 
      MinimumValue="1" SetFocusOnError="true" Type="Integer" ValidationGroup="VgrpInsert") 
     (/asp:RangeValidator) 
    (/FooterTemplate) 
(/asp:TemplateField) 
(asp:TemplateField HeaderText="(*) Holiday Type") 
    (ItemStyle CssClass="DROPDOWN_XLARGE" /) 
    (EditItemTemplate) 
     (asp:DropDownList ID="CboHolidayType" CssClass="DROPDOWN_XLARGE" runat="server" 
      DataTextField="holidaytype" DataValueField="holiday_type_code_id") 
     (/asp:DropDownList) 
     (asp:RangeValidator ID="RvHolidayType" runat="server" ControlToValidate="CboHolidayType" 
      Display="None" ErrorMessage="Please Select Holiday Type" MaximumValue="1000" 
      MinimumValue="1" SetFocusOnError="true" Type="Integer" ValidationGroup="VgrpUpdate") 
     (/asp:RangeValidator) 
    (/EditItemTemplate) 
    (ItemTemplate) 
     (asp:Label ID="LblHolidayType" CssClass="DROPDOWN_XLARGE" runat="server" Text='<%# Eval("holidaytype") %>')(/asp:Label) 
    (/ItemTemplate) 
    (FooterTemplate) 
     (asp:DropDownList ID="CboNewHolidayType" CssClass="DROPDOWN_XLARGE" runat="server" 
      DataTextField="holidaytype" DataValueField="holiday_type_code_id" Enabled="false") 
     (/asp:DropDownList) 
     (asp:RangeValidator ID="RvNewHolidayType" runat="server" ControlToValidate="CboNewHolidayType" 
      Display="None" ErrorMessage="Please Select Holiday Type" MaximumValue="1000" 
      MinimumValue="1" SetFocusOnError="true" Type="Integer" ValidationGroup="VgrpInsert") 
     (/asp:RangeValidator) 
    (/FooterTemplate) 
(/asp:TemplateField) 

コードビハインドページとデザイン

<asp:TemplateField HeaderText="(*) Holiday Group"> 
    <ItemStyle CssClass="TEXTBOX_MEDIUM" /> 
    <EditItemTemplate> 
     <asp:DropDownList ID="CboHolidayGroup" CssClass="DROPDOWN_SMALL" runat="server" 
      DataTextField="holidaygroup" DataValueField="holiday_group_code_id" AutoPostBack="true" 
      OnSelectedIndexChanged="CboHolidayGroup_SelectedIndexChanged"> 
     </asp:DropDownList> 
     <asp:RangeValidator ID="RvHolidayGroup" runat="server" ControlToValidate="CboHolidayGroup" 
      Display="None" ErrorMessage="Please Select Holiday Group" MaximumValue="1000" 
      MinimumValue="1" SetFocusOnError="true" Type="Integer" ValidationGroup="VgrpUpdate"> 
     </asp:RangeValidator> 
    </EditItemTemplate> 
    <ItemTemplate> 
     <asp:Label ID="LblHolidayGroup" CssClass="DROPDOWN_SMALL" runat="server" Text='<%# Eval("holidaygroup") %>'></asp:Label> 
    </ItemTemplate> 
    <FooterTemplate> 
     <asp:DropDownList ID="CboNewHolidayGroup" CssClass="DROPDOWN_SMALL" runat="server" 
      DataTextField="holidaygroup" DataValueField="holiday_group_code_id" Enabled="false" 
      AutoPostBack="true" OnSelectedIndexChanged="CboHolidayGroup_SelectedIndexChanged"> 
     </asp:DropDownList> 
     <asp:RangeValidator ID="RvNewHolidayGroup" runat="server" ControlToValidate="CboNewHolidayGroup" 
      Display="None" ErrorMessage="Please Select Holiday Group" MaximumValue="1000" 
      MinimumValue="1" SetFocusOnError="true" Type="Integer" ValidationGroup="VgrpInsert"> 
     </asp:RangeValidator> 
    </FooterTemplate> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="(*) Holiday Type"> 
    <ItemStyle CssClass="DROPDOWN_XLARGE" /> 
    <EditItemTemplate> 
     <asp:DropDownList ID="CboHolidayType" CssClass="DROPDOWN_XLARGE" runat="server" DataTextField="holidaytype" 
      DataValueField="holiday_type_code_id"> 
     </asp:DropDownList> 
     <asp:RangeValidator ID="RvHolidayType" runat="server" ControlToValidate="CboHolidayType" 
      Display="None" ErrorMessage="Please Select Holiday Type" MaximumValue="1000" 
      MinimumValue="1" SetFocusOnError="true" Type="Integer" ValidationGroup="VgrpUpdate"> 
     </asp:RangeValidator> 
    </EditItemTemplate> 
    <ItemTemplate> 
     <asp:Label ID="LblHolidayType" CssClass="DROPDOWN_XLARGE" runat="server" Text='<%# Eval("holidaytype") %>'></asp:Label> 
    </ItemTemplate> 
    <FooterTemplate> 
     <asp:DropDownList ID="CboNewHolidayType" CssClass="DROPDOWN_XLARGE" runat="server" 
      DataTextField="holidaytype" DataValueField="holiday_type_code_id" Enabled="false"> 
     </asp:DropDownList> 
     <asp:RangeValidator ID="RvNewHolidayType" runat="server" ControlToValidate="CboNewHolidayType" 
      Display="None" ErrorMessage="Please Select Holiday Type" MaximumValue="1000" 
      MinimumValue="1" SetFocusOnError="true" Type="Integer" ValidationGroup="VgrpInsert"> 
     </asp:RangeValidator> 
    </FooterTemplate> 
</asp:TemplateField> 

#Region "CboHolidayGroup_SelectedIndexChanged" 
Protected Sub CboHolidayGroup_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) 
    Dim sGroup As String = String.Empty 
    Dim intGroup As Integer = 0 
    Dim dtNewHolidayType As DataTable 
    Dim dtHolidayType As DataTable 
    Dim objAims As iSymbol = Factory.Factory.CreateSymbolObject() 

    If DirectCast(sender, DropDownList).SelectedIndex > 0 Then 
     If Not IsNothing(DirectCast(sender, DropDownList).Parent.FindControl("CboHolidayGroup")) Then 
      sGroup = DirectCast(sender, DropDownList).SelectedItem.Text 
      intGroup = DirectCast(sender, DropDownList).SelectedValue 
      If sGroup = "Bank" Then 
       If Not IsNothing(DirectCast(sender, DropDownList).Parent.FindControl("ChkBankHoliday")) Then 
        DirectCast(DirectCast(sender, DropDownList).Parent.FindControl("ChkBankHoliday"), CheckBox).Checked = True 
       End If 

       If Not IsNothing(DirectCast(sender, DropDownList).Parent.FindControl("ChkNewBankHoliday")) Then 
        DirectCast(DirectCast(sender, DropDownList).Parent.FindControl("ChkNewBankHoliday"), CheckBox).Checked = True 
       End If 
      Else 
       If Not IsNothing(DirectCast(sender, DropDownList).Parent.FindControl("ChkBankHoliday")) Then 
        DirectCast(DirectCast(sender, DropDownList).Parent.FindControl("ChkBankHoliday"), CheckBox).Checked = False 
       End If 

       If Not IsNothing(DirectCast(sender, DropDownList).Parent.FindControl("ChkNewBankHoliday")) Then 
        DirectCast(DirectCast(sender, DropDownList).Parent.FindControl("ChkNewBankHoliday"), CheckBox).Checked = False 
       End If 
      End If 

      If Not IsNothing(DirectCast(sender, DropDownList).Parent.FindControl("CboHolidayType")) Then 
       Dim CboHolidayType As DropDownList = DirectCast(DirectCast(sender, DropDownList).Parent.FindControl("CboHolidayType"), DropDownList) 
       dtHolidayType = objSymbol.GetSelectedHolTypes(intGroup) 
       If (dtHolidayType.Rows.Count > 0) Then 
        CboHolidayType.DataSource = dtHolidayType 
        CboHolidayType.DataTextField = "holidaytype" 
        CboHolidayType.DataValueField = "holiday_type_code_id" 
        CboHolidayType.DataBind() 
        AddFirstItem(CboHolidayType, _CON_COMBO_FIRST_SELECT) 
       End If 
      End If 
     End If 

     If Not IsNothing(DirectCast(sender, DropDownList).Parent.FindControl("CboNewHolidayGroup")) Then 
      sGroup = DirectCast(sender, DropDownList).SelectedItem.Text 
      intGroup = DirectCast(sender, DropDownList).SelectedValue 
      If sGroup = "Bank" Then 
       If Not IsNothing(DirectCast(sender, DropDownList).Parent.FindControl("ChkNewBankHoliday")) Then 
        DirectCast(DirectCast(sender, DropDownList).Parent.FindControl("ChkNewBankHoliday"), CheckBox).Checked = True 
       End If 
      Else 
       If Not IsNothing(DirectCast(sender, DropDownList).Parent.FindControl("ChkNewBankHoliday")) Then 
        DirectCast(DirectCast(sender, DropDownList).Parent.FindControl("ChkNewBankHoliday"), CheckBox).Checked = False 
       End If 
      End If 

      If Not IsNothing(DirectCast(sender, DropDownList).Parent.FindControl("CboNewHolidayType")) Then 
       Dim CboNewHolidayType As DropDownList = DirectCast(DirectCast(sender, DropDownList).Parent.FindControl("CboNewHolidayType"), DropDownList) 
       dtHolidayType = objSymbol.GetSelectedHolTypes(intGroup) 
       If (dtHolidayType.Rows.Count > 0) Then 
        CboNewHolidayType.DataSource = dtHolidayType 
        CboNewHolidayType.DataTextField = "holidaytype" 
        CboNewHolidayType.DataValueField = "holiday_type_code_id" 
        CboNewHolidayType.DataBind() 
        AddFirstItem(CboNewHolidayType, _CON_COMBO_FIRST_SELECT) 
       End If      
      End If 
     End If 
    End If 
End Sub 
#End Region 
関連する問題