3

ボタンで満たされた列を持つテーブルを作成しています。ボタンは「更新」と呼ばれ、クリックするとすべて正常に動作します。このテーブルの下に、行われた変更の履歴を表示するための「ログ」ボタンがあります。これにより、最初のテーブル (テーブルが内側にあるパネル) が非表示になり、2 番目のテーブルを表示する 2 番目のパネルが表示されます。このテーブルには、ステータス= 0のデータを復元するための「復元」ボタンのある列があります。私の問題はここにあります。このボタンをクリックすると、ページのrequiredfieldvalidatorsがトリガーされます。Validationgroup と Causesvalidation を使用しましたが、何も機能していないようです...助けてください! :)

ここにいくつかのコードがあります:

正常に動作する更新ボタンを含むテーブル:

public void getData()
{
    Provider p = new Provider();
    providers = p.getAllProviders();
    int count = 1;

    //Create a Table
    Table tbl = new Table();
    tbl.Style["Border-width"] = "5px";
    tbl.Style["Border-style"] = "solid";
    tbl.GridLines = GridLines.Both;
    tbl.CellPadding = 5;

    //Header of Table
    TableRow infoRow = new TableRow();

    //Cell of header
    TableCell tch0 = new TableCell();
    tch0.Text = "<b>ProviderID</b>";
    TableCell tch1 = new TableCell();
    tch1.Text = "<b>Name</b>";
    TableCell tch2 = new TableCell();
    tch2.Text = "<b>Phone</b>";
    TableCell tch3 = new TableCell();
    tch3.Text = "<b>Address</b>";
    TableCell tch4 = new TableCell();
    tch4.Text = "<b>Update</b>";

    //Add cells to header
    infoRow.Cells.Add(tch0);
    infoRow.Cells.Add(tch1);
    infoRow.Cells.Add(tch2);
    infoRow.Cells.Add(tch3);
    infoRow.Cells.Add(tch4);

    //Add header to table
    tbl.Rows.Add(infoRow);

    if (providers != null)
    {
        foreach (Provider pr in providers)
        {
            //Create a row
            TableRow tr = new TableRow();

            //Add lable to evry cell
            TableCell tc1 = new TableCell();
            Label pID = new Label();
            tc1.Controls.Add(pID);

            TableCell tc2 = new TableCell();
            Label name = new Label();
            tc2.Controls.Add(name);

            TableCell tc3 = new TableCell();
            Label phone = new Label();
            tc3.Controls.Add(phone);

            TableCell tc4 = new TableCell();
            Label address = new Label();
            tc4.Controls.Add(address);

            TableCell tc5 = new TableCell();
            Button updateBtn = new Button();
            updateBtn.Click += new System.EventHandler(setUpdate);
            updateBtn.Text = "Update";
            updateBtn.ID = "update" + count;
            updateBtn.ValidationGroup = "updateGrp";
            tc5.Controls.Add(updateBtn);

            //Fill lables
            pID.Text = pr.getProviderID().ToString();
            name.Text = pr.getName();
            phone.Text = pr.getPhone();

            Address a = new Address();
            a.setAddressID(pr.getAddressID());
            a = a.getAddressByID();
            address.Text = a.getStreet() + " " + a.getNumber() + " " + a.getCity() + " " + a.getZipCode() + " " + a.getCountry();

            //Add cells to row
            tr.Cells.Add(tc1);
            tr.Cells.Add(tc2);
            tr.Cells.Add(tc3);
            tr.Cells.Add(tc4);
            tr.Cells.Add(tc5);

            //Add row to table
            tbl.Rows.Add(tr);
            count++;
        }
    }
    //Add table to form
    pTableData.Controls.Add(tbl);
}

更新ボタンの機能:

public void setUpdate(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    string id = btn.ID;
    int idInt = Convert.ToInt32(id.Substring(6));

    Provider p = new Provider();
    Address a = new Address();

    p = (Provider)providers[idInt - 1];
    a.setAddressID(p.getAddressID());
    a = a.getAddressByID();

    pUpdate.Visible = true;

    lbl_providerID.Text = p.getProviderID().ToString();
    txt_pUpdate_Name.Text = p.getName();
    txt_pUpdate_Phone.Text = p.getPhone();
    txt_pUpdate_Street.Text = a.getStreet();
    txt_pUpdate_Number.Text = a.getNumber().ToString();
    txt_pUpdate_City.Text = a.getCity();
    txt_pUpdate_ZipCode.Text = a.getZipCode();
    txt_pUpdate_Country.Text = a.getCountry();
}

復元ボタンのある 2 番目のテーブル:

public void getLog()
{
    LogProvider lp = new LogProvider();
    logproviders = lp.getAllLogProviders();
    int count = 1;

    //Create a Table
    Table tbl = new Table();
    tbl.Style["Border-width"] = "5px";
    tbl.Style["Border-style"] = "solid";
    tbl.GridLines = GridLines.Both;
    tbl.CellPadding = 5;

    //Header of Table
    TableRow infoRow = new TableRow();

    //Cell of header
    TableCell tch0 = new TableCell();
    tch0.Text = "<b>LogProviderID</b>";
    TableCell tch1 = new TableCell();
    tch1.Text = "<b>Name</b>";
    TableCell tch2 = new TableCell();
    tch2.Text = "<b>Phone</b>";
    TableCell tch3 = new TableCell();
    tch3.Text = "<b>Address</b>";
    TableCell tch4 = new TableCell();
    tch4.Text = "<b>Status</b>";
    TableCell tch5 = new TableCell();
    tch5.Text = "<b>Type</b>";
    TableCell tch6 = new TableCell();
    tch6.Text = "<b>Updated on</b>";
    TableCell tch7 = new TableCell();
    tch7.Text = "<b>Changed by</b>";
    TableCell tch8 = new TableCell();
    tch8.Text = "<b>Restore</b>";

    //Add cells to header
    //infoRow.Cells.Add(tch0);
    infoRow.Cells.Add(tch1);
    infoRow.Cells.Add(tch2);
    infoRow.Cells.Add(tch3);
    infoRow.Cells.Add(tch4);
    infoRow.Cells.Add(tch5);
    infoRow.Cells.Add(tch6);
    infoRow.Cells.Add(tch7);
    infoRow.Cells.Add(tch8);

    //Add header to table
    tbl.Rows.Add(infoRow);

    if (providers != null)
    {
        foreach (LogProvider logp in logproviders)
        {
            //Create a row
            TableRow tr = new TableRow();

            //Add lable to evry cell
            TableCell tc1 = new TableCell();
            Label lpID = new Label();
            tc1.Controls.Add(lpID);

            TableCell tc2 = new TableCell();
            Label name = new Label();
            tc2.Controls.Add(name);

            TableCell tc3 = new TableCell();
            Label phone = new Label();
            tc3.Controls.Add(phone);

            TableCell tc4 = new TableCell();
            Label address = new Label();
            tc4.Controls.Add(address);

            TableCell tc5 = new TableCell();
            Label status = new Label();
            tc5.Controls.Add(status);

            TableCell tc6 = new TableCell();
            Label type = new Label();
            tc6.Controls.Add(type);

            TableCell tc7 = new TableCell();
            Label updatedOn = new Label();
            tc7.Controls.Add(updatedOn);

            TableCell tc8 = new TableCell();
            Label by = new Label();
            tc8.Controls.Add(by);

            TableCell tc9 = new TableCell();

            //Fill lables
            lpID.Text = logp.getLogProviderID().ToString();
            name.Text = logp.getName();
            phone.Text = logp.getPhone();

            LogAddress la = new LogAddress();
            la.setLogAddressID(logp.getLogProviderID());
            la = la.getLogAddressByID();
            address.Text = la.getStreet() + " " + la.getNumber() + " " + la.getCity() + " " + la.getZipCode() + " " + la.getCountry();

            int stat;
            if (logp.getStatus())
                stat = 1;
            else
                stat = 0;

            status.Text = stat.ToString();
            type.Text = logp.getType();
            updatedOn.Text = String.Format("{0:yyyy-MM-dd HH:mm:ss}", logp.getUpdateDate());
            by.Text = logp.getUserName();

            if(stat == 0)
            {
                Button restoreBtn = new Button();
                restoreBtn.Click += new System.EventHandler(setRestore);
                restoreBtn.Text = "Restore";
                restoreBtn.ID = "restore" + count;
                restoreBtn.ValidationGroup = "restoreGrp";
                tc9.Controls.Add(restoreBtn);
            }

            //Add cells to row
            //tr.Cells.Add(tc1);
            tr.Cells.Add(tc2);
            tr.Cells.Add(tc3);
            tr.Cells.Add(tc4);
            tr.Cells.Add(tc5);
            tr.Cells.Add(tc6);
            tr.Cells.Add(tc7);
            tr.Cells.Add(tc8);
            tr.Cells.Add(tc9);

            //Add row to table
            tbl.Rows.Add(tr);
            count++;
        }
    }
    //Add table to form
    pTableLog.Controls.Add(tbl);
}

復元ボタンの機能 (動作しません!!):

public void setRestore(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    string id = btn.ID;
    int idInt = Convert.ToInt32(id.Substring(7));

    LogProvider lp = new LogProvider();
    Provider p = new Provider();
    LogAddress la = new LogAddress();

    lp = (LogProvider)logproviders[idInt - 1];
    p.setProviderID(lp.getProviderID());
    p = p.getProviderByID();
    la.setLogAddressID(lp.getProviderID());

}
4

1 に答える 1

0

ページ内の必須フィールド バリデータの背後にあるロジックがよくわかりません。私の理解では、バリデーターイベントが発生していないためですか?

その場合、ボタンクリックイベントを呼び出す直前にバリデーターを無効にし、後で有効にすることができます

于 2012-10-18T08:56:00.600 に答える