2

タブ パネルに一連の GridViews があり、ビジネス オブジェクトの一般的なリストにデータ バインドされています。

Gridview の列はすべて次のようになります。

<asp:TemplateField HeaderText="Company" SortExpression="Company.ShortName">
    <ItemTemplate>
        <asp:Label ID="lblCompany" runat="server" Text='<%# Bind("Company.ShortName") %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:DropDownList ID="ddlCompany" runat="server"></asp:DropDownList>
    </EditItemTemplate>
</asp:TemplateField>

GridView は行の先頭に「編集」リンクを生成し、すべてのイベントが正常に起動します。問題は、データが長くなることです。「表示モード」の場合、GridView コントロールは一部のテキストを複数の行に分割するのに十分なほどスマートであるため、問題ありません (特に、プロジェクト、タイトル、およびワーカーの名前はかなり長くなる可能性があります)。

問題は編集モードで発生します。ドロップダウン リストは、エントリを複数の行に分割しないでください (明らかな理由により)。Gridview の行で Edit ode に入ると、Griview が水平方向に拡大して画面サイズの 2 倍になることがあります (マスター ページと CSS の幅制限を超えていますが、これは関連する問題にすぎません)。

必要なのは ModalPopup のようなものですが、それを EditItemTemplate の ID に関連付けようとすると、ページのレンダリング時にエラーが発生します (その時点で「ddlXXXX」が存在しないため)。さらに、パネルから応答を取得できるようにパネルに動的にデータを入力する方法がわかりません (選択した会社の ID など)。

また、JavaScript を回避しようとしており、これを「純粋な」aspx/コード ビハインド ソリューションにしたいと考えています (特に単純化のため)。

私が見つけたすべての例は、パネルが事前定義されたモーダルポップアップです。それ (ポップアップ パネル) がチェックボックスのリストのようなものであったとしても、SortedList にデータ バインドすることができ、OK/キャンセル ボタンの組み合わせを受け入れたり無視したりすることができます。何がどこにあるのかわからないだけです。

私は提案を受け入れます。前もって感謝します。

編集:最終的な解決策は次のようになります。

<asp:TemplateField HeaderText="Company" SortExpression="Company.ShortName">
    <ItemTemplate>
        <asp:Label ID="lblCompany" runat="server" Text='<%# Bind("Company.ShortName") %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:LinkButton ID="lnkCompany" runat="server" Text='<%# Bind("Company.ShortName") %>'></asp:LinkButton>
        <asp:Panel ID="pnlCompany" runat="server" style="display:none">
            <div> 
                <asp:DropDownList ID="ddlCompany" runat="server" ></asp:DropDownList>
                <br/> 
                <asp:ImageButton ID="btnOKCo" runat="server" ImageUrl="~/Images/greencheck.gif" OnCommand="PopupButton_Command" CommandName="SelectCO" /> 
                <asp:ImageButton ID="btnCxlCo" runat="server" ImageUrl="~/Images/RedX.gif" /> 
            </div> 
        </asp:Panel>
        <cc1:ModalPopupExtender ID="mpeCompany" runat="server" 
                TargetControlID="lnkCompany" PopupControlID="pnlCompany" 
                BackgroundCssClass="modalBackground" CancelControlID="btnCxlCo" 
                DropShadow="true" PopupDragHandleControlID="pnlCompany" />
    </EditItemTemplate>
</asp:TemplateField>

また、コード ビハインドでは、lstIDLabor は、GridView にバインドされているデータ行の汎用リスト (Company は、ビジネス オブジェクトでもあるプロパティの 1 つです) です。

Sub PopupButton_Command(ByVal sender As Object, ByVal e As CommandEventArgs)
    Dim intRow As Integer
    Dim intVal As Integer
    RestoreFromSessionVariables()
    Select Case e.CommandName
        Case "SelectCO"
            intRow = grdIDCostLabor.EditIndex
            Dim ddlCo As DropDownList = CType(grdIDCost.Rows(intRow).FindControl("ddlCompany"), DropDownList)
            intVal = ddlCo.SelectedValue
            lstIDLabor(intRow).CompanyID = intVal
            lstIDLabor(intRow).Company = Company.Read(intVal)
        Case Else
            '
    End Select
    MakeSessionVariables()
    BindGrids()
End Sub
4

1 に答える 1

0

これはどうですか?

<asp:TemplateField HeaderText="Company" SortExpression="Company.ShortName">
<ItemTemplate>
    <asp:Label ID="lblCompany" runat="server" Text='<%# Bind("Company.ShortName") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
    <asp:LinkButton ID="EditBtn" runat="server" Text='<%# Eval("Company.ShortName") %>' />
      <asp:Panel ID="Panel1" runat="server" Style="display: none" CssClass="modalPopup">
        <div>
          <asp:DropDownList ID="ddlCompany" runat="server"  SelectedValue='<%# Bind("Company.ID")></asp:DropDownList><br/>
          <asp:ImageButton ID="OkButton" runat="server" ImageUrl="~/Images/OkBtn.png"  />
          <asp:ImageButton ID="CancelButton" runat="server" ImageUrl="~/Images/Cancel.png" />

          </div>
        </div>
      </asp:Panel>
      <act:ModalPopupExtender ID="ModalPopupExtender" runat="server" TargetControlID="EditBtn"
        PopupControlID="Panel1" BackgroundCssClass="modalBackground" CancelControlID="CancelButton"
        DropShadow="true" PopupDragHandleControlID="Panel1" />
</EditItemTemplate>

したがって、編集すると会社がlinkBut​​tonとして表示され、クリックすると会社IDに既にバインドされているドロップダウンを含むポップアップが表示されます。

于 2010-04-16T20:47:01.193 に答える