简体   繁体   English

使用按钮和requirefieldvalidators动态创建表c#

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

I'm creating a table with aa collumn filled with buttons. 我正在创建一个带有按钮的柱子。 The button is called "Update" and when I click it everything is working fine. 该按钮被称为“更新”,当我点击它时一切正常。 Under this table I have a button "Log" to see the history of the changes made. 在此表下,我有一个“Log”按钮,可以查看所做更改的历史记录。 This hides the first table (panel with table inside) and makes a second panel visible that shows the second table. 这会隐藏第一个表(带有表格的面板),并使第二个面板可见,显示第二个表格。 In this table I have a column with "restore" buttons to restore the data where the status = 0. My problem is here, when i click on this button, it triggers the requiredfieldvalidators of the page. 在这个表中我有一个带有“恢复”按钮的列来恢复状态= 0的数据。我的问题在这里,当我点击这个按钮时,它会触发页面的requiredfieldvalidators。 I have used the Validationgroup and the Causesvalidation, but nothing seems to work... Help me please! 我使用了Validationgroup和Reasonvalidation,但似乎没有任何工作......请帮帮我! :) :)

Here's some code: 这是一些代码:

Table with update btn that works fine: 表更新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);
}

function of the update btn: 更新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();
}

Second table with restore btn: 恢复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);
}

Function of the restore btn (doesn't work!!): 恢复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());

}

Am not sure about the logic behind the required field validators in the page. 我不确定页面中所需字段验证器背后的逻辑。 My understandinf is that because of the validators event is not firing ? 我的理解是因为验证器事件没有解雇?

If so you can disable the validators just before you call the button click event and enable it later 如果是这样,您可以在调用按钮单击事件之前禁用验证器,并在以后启用它

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM