ボタンで満たされた列を持つテーブルを作成しています。ボタンは「更新」と呼ばれ、クリックするとすべて正常に動作します。このテーブルの下に、行われた変更の履歴を表示するための「ログ」ボタンがあります。これにより、最初のテーブル (テーブルが内側にあるパネル) が非表示になり、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());
}