1

5つのグリッドがあるページがあります。各グリッドの最初のフィールドはテンプレート内です。ページの読み込み時に、ポストバックでない場合は、データベースからの戻りに基づいてこのチェックボックスをオンにします。

ユーザーがチェックボックスをオフにした場合、このcheckeboxed.checked=falseはポストバックで保持されません。興味深いことに、ユーザーがチェックされていないチェックボックスをオンにすると、その変更はポストバックに反映されます。修正方法について誰か提案があれば教えてください。ありがとうございました!

<asp:GridView ID="commonAdultClinicReferrals" CssClass="Report" runat="server" AutoGenerateColumns="false"
                            Width="270" AllowPaging="false" AlternatingRowStyle-CssClass="DataAlternateRow"
                            CellPadding="1" CellSpacing="1" HeaderStyle-HorizontalAlign="Center" EmptyDataText="No Results."
                            DataKeyNames="Id,Name,Description,FollowUpList"  OnRowDataBound="GridView_RowDataBound">
                            <Columns>
                                <asp:TemplateField ItemStyle-Width="10">
                                    <ItemTemplate>
                                        <center>
                                            <asp:CheckBox ID="selectedRowCb" runat="server"  />
                                        </center>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:BoundField DataField="Name" HeaderText="Common Adult Clinic Referrals" ItemStyle-Width="250"
                                    ItemStyle-Wrap="true" />
                            </Columns>
                        </asp:GridView>

クラス:

public class FollowUp
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool FollowUpList { get; set; }
    public bool Selected { get; set; }

    public FollowUp(int id, string name, string description, bool followUpList, bool selected)
    {
        this.Id = id;
        this.Name = name;
        this.Description = description;
        this.FollowUpList = followUpList;
        this.Selected = selected;
    }
}

DataBind:

 protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {
        hdnWindowClose.Value = string.Empty;

        loadUi();
    }


}

private void loadUi()
{

    _adultServices = GetFollowUps(2, true);
    adultClinicReferrals.DataSource = _adultServices;
    adultClinicReferrals.DataBind();

}

チェックボックスをオンに設定:

protected void GridView_RowDataBound(Object sender, GridViewRowEventArgs e)
{

    if (e.Row.RowType == DataControlRowType.DataRow && !Page.IsPostBack)
    {
        CheckBox cb = ((CheckBox)e.Row.FindControl("selectedRowCb"));
        FollowUp fol = (FollowUp)e.Row.DataItem;
        bool selected = fol.Selected;

        cb.Checked = selected;

    }

}

保存時:

 protected void saveButton_Click(object sender, EventArgs e)
{
    GetSelectedCodes(followUpAppointments);
    GetSelectedCodes(adultClinicReferrals);
    GetSelectedCodes(commonAdultClinicReferrals);
    GetSelectedCodes(otherAdultClinicReferrals);
    GetSelectedCodes(pediClinicReferrals);

    hdnWindowClose.Value = "yes";


    JavaScriptSerializer js = new JavaScriptSerializer();
    string str = js.Serialize(_selectedServices);

    hdnFollowUp.Value = str;
    SetNotePickCodes();
}

最後に、GetSelectedCodes()内で、checkbox.check状態は、そのチェックボックスがデフォルトでtrueに設定されている場合は機能しません。

private void GetSelectedCodes(GridView gv)
{

    for (int i = 0; i < gv.Rows.Count; i++)
    {
        GridViewRow row = gv.Rows[i];
        bool isChecked = ((CheckBox)row.FindControl("selectedRowCb")).Checked;

        if (isChecked)
        {
            int id = (Int32)gv.DataKeys[i]["Id"];
            string name = gv.DataKeys[i]["Name"].ToString();
            string description = gv.DataKeys[i]["Description"].ToString();
            bool followup = (bool)gv.DataKeys[i]["FollowUpList"];

            _selectedServices.Add(new FollowUp(id,name,description,followup,true));
        }


    }

if(isChecked)ブランチが実行されているのに、予期しないときに実行されています。たとえば、ユーザーがチェックボックスをオフにした場合です。私のデータバインドは、page.postbackでない場合、ページの読み込み時にのみ実行されます。

助けてくれてありがとう。

ありがとうございました、

ジェイ

4

0 に答える 0