CheckBoxList - успех, RadioButtonList - сбой - PullRequest
0 голосов
/ 04 ноября 2018

CheckBoxList и четыре RadioButtonLists находятся в одном файле .aspx на разных панелях, связанных с разными ModalPopupExtenders из AjaxToolKit. Я не обрабатываю их события SelectedIndexChanged. Состояние элементов списка проверяется в обработчиках событий кнопки; кнопки также находятся на этих панелях. Состояние элементов CheckBoxList (в 'cblFlter') переходит к обработчику кнопки OK на панели со списком флажков. Состояние элементов RadioButtonLists (от 'obl0' до 'obl3') не переносится на обработчик кнопки OK на панели со списками переключателей: при отладке кода c # все четыре из них всегда имеют свои выбран первый переключатель, независимо от того, на какой переключатель я нажал, прежде чем нажимать на кнопку «ОК», и независимо от того, установили ли их свойства «Выбранные» разные для каждого списка переключателей в разметке.

Вот частичный список файла .aspx:

<%@ Page Title="List of Expenses" Language="C#" MasterPageFile="~/mTSoar.Master" AutoEventWireup="true" CodeBehind="Expenses.aspx.cs"
Inherits="TSoar.Accounting.FinDetails.ExpVendAP.Expenses" %>

<asp:Content ID="HeaderContent" ContentPlaceHolderID="ContentPlaceHolderHeader" runat="server">
<asp:Label runat="server" Text="Accounting - Bookkeeping - Expenses, Vendors, Accounts Payable - Expenses" Font-Italic="true" />
</asp:Content>

<asp:Content ID="MainContent" ContentPlaceHolderID="ContentPlaceHolderMain" runat="server">
<a href="XactExpense.aspx">Create New Expense Record</a>
.
.
.
<div id="ModPopExtFiltering">
    <asp:LinkButton ID="LinkButton2" runat="server" Text="T" CssClass="displayNone" />
    <ajaxToolkit:ModalPopupExtender ID="ModPopExtFilter" runat="server"
        TargetControlID="LinkButton2" PopupControlID="MPE_PanelFilter"
        BackgroundCssClass="background" />
    <asp:Panel ID="MPE_PanelFilter" runat="server" CssClass="popup" style="display:none;" HorizontalAlign="Center">
        Display those transactions with a status that is checked:
        <p>
            <asp:CheckBoxList ID="cblFilter" runat="server" RepeatDirection="Vertical" RepeatLayout="UnorderedList" >
                <asp:ListItem>Active</asp:ListItem>
                <asp:ListItem>Voided</asp:ListItem>
                <asp:ListItem>Deleted</asp:ListItem>
                <asp:ListItem>Template</asp:ListItem>
            </asp:CheckBoxList>
        </p>
        <p> <asp:Button ID="pbFilterOK" runat="server" Text="OK" OnClick="pbFilterOKCancel_Click" />&nbsp;&nbsp;
            <asp:Button ID="pbFilterCancel" runat="server" Text="Cancel" OnClick="pbFilterOKCancel_Click" />
        </p>
    </asp:Panel>
</div>

<div id="ModPopExtSorting">
    <asp:LinkButton ID="LinkButton3" runat="server" Text="T" CssClass="displayNone" />
    <ajaxToolkit:ModalPopupExtender ID="ModPopExtSort" runat="server"
        TargetControlID="LinkButton3" PopupControlID="MPE_PanelSort"
        BackgroundCssClass="background" />
    <asp:Panel ID="MPE_PanelSort" runat="server" CssClass="popup" style="display:none;" HorizontalAlign="Center">
        <table style="align-self:center">
            <tr>
                <td</td><td></td><td></td>
                <td>Sort Priority</td>
            </tr>
            <tr>
                <th></th><th>&nbsp;</th>
                <th><asp:Label runat="server" Text="1&nbsp;2&nbsp;3&nbsp;4" Font-Size="Medium" /></th>
            </tr>
            <tr>
                <td>Date</td><td></td>
                <td><asp:RadioButtonList ID="obl0" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" RepeatLayout="Table"
                    EnableViewState="true" ViewStateMode="Enabled">
                        <asp:ListItem> &nbsp; </asp:ListItem>
                        <asp:ListItem> &nbsp; </asp:ListItem>
                        <asp:ListItem> &nbsp; </asp:ListItem>
                        <asp:ListItem Selected="True"> &nbsp; </asp:ListItem>
                    </asp:RadioButtonList>
                </td>
            </tr>
            <tr>
                <td>Vendor</td><td></td>
                <td><asp:RadioButtonList ID="obl1" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" RepeatLayout="Table"
                    EnableViewState="true" ViewStateMode="Enabled">
                        <asp:ListItem> &nbsp; </asp:ListItem>
                        <asp:ListItem> &nbsp; </asp:ListItem>
                        <asp:ListItem Selected="True"> &nbsp; </asp:ListItem>
                        <asp:ListItem> &nbsp; </asp:ListItem>
                    </asp:RadioButtonList>
                </td>
            </tr>
            <tr>
                <td>Status</td><td></td>
                <td><asp:RadioButtonList ID="obl2" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" RepeatLayout="Table"
                    EnableViewState="true" ViewStateMode="Enabled">
                        <asp:ListItem> &nbsp; </asp:ListItem>
                        <asp:ListItem Selected="True"> &nbsp; </asp:ListItem>
                        <asp:ListItem> &nbsp; </asp:ListItem>
                        <asp:ListItem> &nbsp; </asp:ListItem>
                    </asp:RadioButtonList>
                </td>
            </tr>
            <tr>
                <td>Amount</td><td></td>
                <td><asp:RadioButtonList ID="obl3" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" RepeatLayout="Table"
                    EnableViewState="true" ViewStateMode="Enabled">
                        <asp:ListItem Selected="True"> &nbsp; </asp:ListItem>
                        <asp:ListItem> &nbsp; </asp:ListItem>
                        <asp:ListItem> &nbsp; </asp:ListItem>
                        <asp:ListItem> &nbsp; </asp:ListItem>
                    </asp:RadioButtonList>
                </td>
            </tr>
        </table>
        <p> <asp:Button ID="pbSortOK" runat="server" Text="OK" OnClick="pbSortOKCancel_Click" />&nbsp;&nbsp;
            <asp:Button ID="pbSortCancel" runat="server" Text="Cancel" OnClick="pbSortOKCancel_Click" />
        </p>
    </asp:Panel>
</div>
.
.
.

Вот частичный список файла .aspx.cs:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TSoar.DB;

namespace TSoar.Accounting.FinDetails.ExpVendAP
{
    public partial class Expenses : System.Web.UI.Page
    {
.
.
.

        protected void pbFilter_Click(object sender, EventArgs e)
        {
            DataTable dtTFilter = AccountProfile.CurrentUser.XactFilterSettings;
            for (int i = 0; i < 4; i++)
            {
                cblFilter.Items[i].Selected = (bool)dtTFilter.Rows[i]["bFilter"];
            }
            ModPopExtFilter.Show();
        }

        protected void pbFilterOKCancel_Click(object sender, EventArgs e)
        {
            Button pb = (Button)sender;
            switch (pb.ID)
            {
                case "pbFilterOK":
                    DataTable dtTFilter = AccountProfile.CurrentUser.XactFilterSettings;
                    for (int i = 0; i < 4; i++)
                    {
                        dtTFilter.Rows[i]["bFilter"] = cblFilter.Items[i].Selected;
                    }
                    AccountProfile.CurrentUser.XactFilterSettings = dtTFilter;
                    DisplayGrid();
                    break;
                default:
                    break;
            }
        }

        protected void pbSort_Click(object sender, EventArgs e)
        {
            RadioButtonList[] obla = new RadioButtonList[4];
            obla[0] = obl0;
            obla[1] = obl1;
            obla[2] = obl2;
            obla[3] = obl3;
            DataTable dtTSort = AccountProfile.CurrentUser.XactSortSettings;
            int rowIndex = 0;
            foreach(DataRow dr in dtTSort.Rows)
            {
                obla[rowIndex].ClearSelection();
                obla[rowIndex].Items[(int)dr["SortOrder"] - 1].Selected = true;
                rowIndex++;
            }
            ModPopExtSort.Show();
        }


        protected void pbSortOKCancel_Click(object sender, EventArgs e)
        {
            Button pb = (Button)sender;
            switch (pb.ID)
            {
                case "pbSortOK":
                    RadioButtonList[] obla = new RadioButtonList[4];
                    obla[0] = obl0;
                    obla[1] = obl1;
                    obla[2] = obl2;
                    obla[3] = obl3;
                    int iSum = 0;
                    foreach (XactSort.eSortBy es in Enum.GetValues(typeof(XactSort.eSortBy)))
                    {
                        for (int j = 1; j < 5; j++)
                        {
                            if (obla[(int)es].Items[j-1].Selected)
                            {
                                iSum += j * (int)(Math.Pow(10.0, j - 1) + 0.1);
                            }
                        }
                    }
                    if (iSum != 4321)
                    {
                        ProcessPopupException(new Global.excToPopup("Invalid Sort Priorities - each of Date, Vendor, Status, and Amount " +
                            "must be assigned a different sort priority between 1 and 4. [Checksum=" + iSum.ToString() + "]"));
                    }
                    else
                    {
                        DataTable dtTSort = AccountProfile.CurrentUser.XactSortSettings;
                        foreach(XactSort.eSortBy es in Enum.GetValues(typeof(XactSort.eSortBy)))
                        {
                            for (int j = 1; j < 5; j++)
                            {
                                if (obla[(int)es].Items[j-1].Selected)
                                {
                                    dtTSort.Rows[(int)es]["SortOrder"] = j;
                                }
                            }
                        }
                        AccountProfile.CurrentUser.XactSortSettings = dtTSort;
                        DisplayGrid();
                    }
                    break;
                default:
                    break;
            }
        }
    }
}
.
.
.

Вам нужна дополнительная информация, чтобы помочь мне решить эту проблему?

1 Ответ

0 голосов
/ 05 ноября 2018

Проблема решена путем добавления свойства 'Value' к каждому элементу ListBtem объекта RadioButtonList, как это было предложено Мартином Уллрихом (например, свойство value должно быть разным для каждого элемента ListItem в пределах одного объекта RadioButtonList):

<div id="ModPopExtSorting">
    <asp:LinkButton ID="LinkButton3" runat="server" Text="T" CssClass="displayNone" />
    <ajaxToolkit:ModalPopupExtender ID="ModPopExtSort" runat="server"
        TargetControlID="LinkButton3" PopupControlID="MPE_PanelSort"
        BackgroundCssClass="background" />
    <asp:Panel ID="MPE_PanelSort" runat="server" CssClass="popup" style="display:none;" HorizontalAlign="Center">
        <table class="center-block">
            <tr>
                <th></th><th>&nbsp;&nbsp;&nbsp;&nbsp;</th>
                <th>Sort Priority</th>
            </tr>
            <tr>
                <td>Date</td><td></td>
                <td><asp:RadioButtonList ID="obl0" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" RepeatLayout="Table" TextAlign="Left">
                        <asp:ListItem Selected="True" Value="1"/>
                        <asp:ListItem Value="2"/>
                        <asp:ListItem Value="3"/>
                        <asp:ListItem Value="4"/>
                    </asp:RadioButtonList>
                </td>
            </tr>
            <tr>
                <td>Vendor</td><td></td>
                <td><asp:RadioButtonList ID="obl1" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" RepeatLayout="Table" TextAlign="Left">
                        <asp:ListItem Value="1"/>
                        <asp:ListItem Selected="True" Value="2"/>
                        <asp:ListItem Value="3"/>
                        <asp:ListItem Value="4"/>
                    </asp:RadioButtonList>
                </td>
            </tr>
            <tr>
                <td>Status</td><td></td>
                <td><asp:RadioButtonList ID="obl2" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" RepeatLayout="Table" TextAlign="Left">
                        <asp:ListItem Value="1"/>
                        <asp:ListItem Value="2"/>
                        <asp:ListItem Selected="True" Value="3"/>
                        <asp:ListItem Value="4"/>
                    </asp:RadioButtonList>
                </td>
            </tr>
            <tr>
                <td>Amount</td><td></td>
                <td><asp:RadioButtonList ID="obl3" runat="server" RepeatColumns="4" RepeatDirection="Horizontal" RepeatLayout="Table" TextAlign="Left">
                        <asp:ListItem Value="1"/>
                        <asp:ListItem Value="2"/>
                        <asp:ListItem Value="3"/>
                        <asp:ListItem Selected="True" Value="4"/>
                    </asp:RadioButtonList>
                </td>
            </tr>
        </table>
        <p> <asp:Button ID="pbSortOK" runat="server" Text="OK" OnClick="pbSortOKCancel_Click" />&nbsp;&nbsp;
            <asp:Button ID="pbSortCancel" runat="server" Text="Cancel" OnClick="pbSortOKCancel_Click" />
        </p>
    </asp:Panel>
</div>

Комментарий: мне не удалось найти документацию по этому вопросу в https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.radiobuttonlist?view=netframework-4.7.2; в «Декларативном синтаксисе» свойство Value упоминается в ListItem, но нет указания на то, что оно требуется для определения выбранного элемента в PostBack (согласно исследованию Мартина Уллрича).

...