簡體   English   中英

使用按鈕和requirefieldvalidators動態創建表c#

[英]Dynamically created table with buttons and requirefieldvalidators c#

我正在創建一個帶有按鈕的柱子。 該按鈕被稱為“更新”,當我點擊它時一切正常。 在此表下,我有一個“Log”按鈕,可以查看所做更改的歷史記錄。 這會隱藏第一個表(帶有表格的面板),並使第二個面板可見,顯示第二個表格。 在這個表中我有一個帶有“恢復”按鈕的列來恢復狀態= 0的數據。我的問題在這里,當我點擊這個按鈕時,它會觸發頁面的requiredfieldvalidators。 我使用了Validationgroup和Reasonvalidation,但似乎沒有任何工作......請幫幫我! :)

這是一些代碼:

表更新btn工作正常:

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);
}

更新btn的功能:

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();
}

恢復btn的第二個表:

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);
}

恢復btn的功能(不起作用!!):

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());

}

我不確定頁面中所需字段驗證器背后的邏輯。 我的理解是因為驗證器事件沒有解雇?

如果是這樣,您可以在調用按鈕單擊事件之前禁用驗證器,並在以后啟用它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM