Hiiii,
在下图中,表&其中的控件是动态生成的。
使用dropdownlist中没有的值,单击“创建表”按钮创建表。行作为值。
如何获得特定的“Fileupload”& “上传”按钮的ID。
点击“上传”按钮时,只能访问与该按钮相同的行中的文件上载控件。它不应该遍历表中的所有fileupload控件。
在我的代码中,当我点击下行中的上传按钮(比如第3行)时,它也会上传在上面的文件上传控件中选择的文件(此处为第1行第2行和第3行)。
我不想要这个。我只想在单击按钮的同一行中从filupload控件上传文件。
代码:
public partial class stable : System.Web.UI.Page
{
private int tblRow;
private int tblCol = 9;
private int i, j;
private bool CTflag;
Table table = new Table();
TableRow row,rrow;
TableCell cell,rcell;
FileUpload fileUp;
Button UpLdButton;
Button btnCal;
TextBox tb;
Label tbr;
string cmdArg; // for passing filuploaders id with Command button
private string filename = "fileUpLoader";
private string tbRowId = "row";
private string tbColId = "col";
protected int Rows
{
get
{
return ViewState["Rows"] != null ? (int)ViewState["Rows"] : 0;
}
set
{
ViewState["Rows"] = tblRow;
}
}
// Columns property to hold the Columns in the ViewState
protected int Columns
{
get
{
return ViewState["Columns"] != null ? (int)ViewState["Columns"] : 0;
}
set
{
ViewState["Columns"] = tblCol;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
if (CTflag == false)
{
this.Rows = tblRow;
this.Columns = tblCol;
CreateDynamicTable();
}
else
{
CTflag = true;
}
}
//LoadViewState(object this);
//CreateDynamicTable();
}
protected void Button1_Click(object sender, EventArgs e)
{
clrControls();
CreateDynamicTable();
}
protected void CreateDynamicTable()
{
tblRow = Convert.ToInt32(DropDownList1.SelectedValue);
//Creat the Table and Add it to the Page
if (CTflag == false)
{
table.Caption = "Challan Entry";
table.ID = "Challan Entry";
table.BackColor = System.Drawing.Color.BurlyWood;
Page.Form.Controls.Add(table);
// Now iterate through the table and add your controls
for (i = 0; i < 1; i++)
{
row = new TableRow();
row.BorderStyle = BorderStyle.Ridge;
for (j = 0; j <= tblCol; j++)
{
cell = new TableCell();
cell.BorderWidth = 5;
cell.BorderStyle = BorderStyle.Ridge;
cell.BorderColor = System.Drawing.Color.Azure;
for (j = 0; j <= tblCol; j++)
{
string[] Header = { "CC NO.", "DATE", "TotalAmt", "NoOfRecpt", "Energy", "New", "Theft", "Misc", "SelectFile", "Upload", "Status" };
Label lbl = new Label();
lbl.ID = "lblHeader" + j;
if (j == 8)
{
lbl.Width = 220;
}
else if (j == 9)
{
lbl.Width = 50;
}
else
{
lbl.Width = 100;
}
lbl.Text = Header[j];
// Add the control to the TableCell
cell.Controls.Add(lbl);
}
row.Cells.Add(cell);
}
// Add the TableRow to the Table
table.Rows.Add(row);
}
for (i = 0; i < tblRow; i++)
{
row = new TableRow();
row.ID = tbRowId + i;
row.BorderStyle = BorderStyle.Ridge;
for (j = 0; j <= tblCol; j++)
{
cell = new TableCell();
cell.ID = tbColId + i + j;
cell.BorderWidth = 5;
cell.BorderStyle = BorderStyle.Ridge;
cell.BorderColor = System.Drawing.Color.Azure;
for (j = 0; j <= 0; j++)
{
Label lbl = new Label();
lbl.ID = "lblCCRow" + i + "Col" + j;
lbl.Text = "CC NO. " + i + " ";
lbl.Width = 100;
// Add the control to the TableCell
cell.Controls.Add(lbl);
}
for (j = 1; j <= 1; j++)
{
Label lbl = new Label();
lbl.ID = "lblRow" + i + "Col" + j;
lbl.Width = 100;
lbl.Text = Convert.ToString(DateTime.Now.Day) + "/" + Convert.ToString(DateTime.Now.Month) + "/" + Convert.ToString(DateTime.Now.Year);
// Add the control to the TableCell
cell.Controls.Add(lbl);
}
for (j = 2; j <= 7; j++)
{
tb = new TextBox();
tb.Width = 100;
tb.ID = "txtBoxRow" + i + "Col" + j;
//txtbxNames[i,j] = Convert.ToString(tb.ID);
tb.Text = "0";
// Add the control to the TableCell
cell.Controls.Add(tb);
}
for (j = 8; j <= 8; j++)
{
fileUp = new FileUpload();
//m = i; n = j;
fileUp.ID = filename + i + j;
fileUp.Width = 220;
cell.Controls.Add(fileUp);
cmdArg = fileUp.ID;
UpLdButton = new Button();
UpLdButton.Width = 100;
UpLdButton.Text = "Upload" + i + j;
UpLdButton.ID = UpLdButton.Text;
UpLdButton.CommandArgument= cmdArg;
cell.Controls.Add(UpLdButton);
UpLdButton.Click += new EventHandler(UpLdButton_Click);
}
for (j = 9; j <= 9; j++)
{
Label lbl = new Label();
lbl.ID = "lblRow" + i + j;
lbl.Text = "[ Status ]";
lbl.Width = 100;
// Add the control to the TableCell
cell.Controls.Add(lbl);
}
row.Cells.Add(cell);
}
// Add the TableRow to the Table
table.Rows.Add(row);
} //outer for-loop end
for (i = 0; i < 1; i++)
{
rrow = new TableRow();
rrow.ID = "ResultRow";
rrow.BorderStyle = BorderStyle.Ridge;
for (j = 0; j <= tblCol; j++)
{
rcell = new TableCell();
rcell.ID = "resultCol" + j;
rcell.BorderWidth = 5;
rcell.BorderStyle = BorderStyle.Ridge;
rcell.BorderColor = System.Drawing.Color.Azure;
for (j = 0; j <= 0; j++)
{
Label lbl = new Label();
//lbl.ID = "lblCCRow" + i + "Col" + j;
lbl.Text = "<b>Total</b>";
lbl.Width = 100;
// Add the control to the TableCell
rcell.Controls.Add(lbl);
}
for (j = 1; j <= 1; j++)
{
Label lbl = new Label();
//lbl.ID = "lblRow" + i + "Col" + j;
lbl.Width = 100;
lbl.Text = Convert.ToString(DateTime.Now.Day) + "/" + Convert.ToString(DateTime.Now.Month) + "/" + Convert.ToString(DateTime.Now.Year);
// Add the control to the TableCell
rcell.Controls.Add(lbl);
}
for (j = 2; j <= 7; j++)
{
tbr = new Label();
tbr.Width = 100;
tbr.ID = "txtResult" +i+j;
tbr.Text = tbr.ID;
tbr.EnableTheming = true;
tbr.BackColor = System.Drawing.Color.White;
//txtResNames[i, j] = Convert.ToString(tbr.ID);
// Add the control to the TableCell
rcell.Controls.Add(tbr);
}
for (j = 8; j <= 8; j++)
{
btnCal = new Button();
btnCal.Width = 100;
btnCal.Text = "Calculate";
btnCal.ID = btnCal.Text;
rcell.Controls.Add(btnCal);
btnCal.Click += new EventHandler(btnCal_Click);
}
rrow.Cells.Add(rcell);
}
// Add the TableRow to the Table
table.Rows.Add(rrow);
}
//flag seetting
CTflag = true;
ViewState["dynamictable"] = true;
}
}
void btnCal_Click(object sender, EventArgs e)
{
TextBox tbres = new TextBox();
TextBox tbTemp = new TextBox();
double TotAmt = 0, NoofRect = 0, Energy = 0,New1 = 0, Theft = 0, Misc = 0;
for (int i = 0; i < tblRow; i++)
{
for (int j = 2; j <= 7; j++)
{
TextBox tb = (TextBox)FindControlRecursive(this, string.Format("txtBoxRow{0}Col{1}", i, j));
Label tbr = (Label)FindControlRecursive(this, string.Format("txtResult{0}{1}", 0, j));
switch (j)
{
case 2:
TotAmt += Convert.ToDouble(tb.Text);
Label1.Text = Convert.ToString(TotAmt);
tbr.Text = Convert.ToString(TotAmt);
break;
case 3:
NoofRect += Convert.ToDouble(tb.Text);
//Label1.Text = Convert.ToString(NoofRect);
tbr.Text = Convert.ToString(NoofRect);
break;
case 4:
Energy+= Convert.ToDouble(tb.Text);
//Label1.Text = Convert.ToString(TotAmt);
tbr.Text = Convert.ToString(Energy);
break;
case 5:
New1+= Convert.ToDouble(tb.Text);
//Label1.Text = Convert.ToString(TotAmt);
tbr.Text = Convert.ToString(New1);
break;
case 6:
Theft+= Convert.ToDouble(tb.Text);
//Label1.Text = Convert.ToString(TotAmt);
tbr.Text = Convert.ToString(Theft);
break;
case 7:
Misc+= Convert.ToDouble(tb.Text);
//Label1.Text = Convert.ToString(TotAmt);
tbr.Text = Convert.ToString(Misc);
break;
}
}
}
}
protected void clrControls()
{
Label1.Text = "";
for (int i = 0; i < tblRow; i++)
{
for (int j = 2; j <= 7; j++)
{
fileUp = (FileUpload)FindControlRecursive(this, string.Format("fileUpLoader{0}{1}", i, 8));
fileUp.Enabled = true;
Button btn = (Button)FindControlRecursive(this, string.Format("Upload{0}{1}", i, 8));
btn.Enabled=true;
TextBox tb = (TextBox)FindControlRecursive(this, string.Format("txtBoxRow{0}Col{1}", i, j));
tb.Text = "0";
Label tbr = (Label)FindControlRecursive(this, string.Format("txtResult{0}{1}", 0, j));
tbr.Text = "0";
Label statlbl = new Label();
statlbl = (Label)FindControlRecursive(this, string.Format("lblRow{0}{1}", i, 9));
statlbl.Text = "[status]";
}
}
for (i = 0; i < 1; i++)
{
for (j = 8; j <= 8; j++)
{
btnCal.Enabled = true;
}
}
}
protected override void LoadViewState(object earlierState)
{
base.LoadViewState(earlierState);
if (ViewState["dynamictable"] == null)
{
CreateDynamicTable();
}
}
void UpLdButton_Click(object sender, EventArgs e)
{
Button btnUpLD = sender as Button;
for (int i = 0; i < tblRow; i++)
{
Button tb = (Button)FindControlRecursive(this, string.Format("Upload{0}{1}", i, 8));
fileUp = (FileUpload)FindControlRecursive(this, string.Format("fileUpLoader{0}{1}", i, 8));
Label statlbl = new Label();
statlbl = (Label)FindControlRecursive(this, string.Format("lblRow{0}{1}", i, 9));
if (!fileUp.HasFile)
{
//statlbl.Text = "[status]";
continue;
}
else
{
UploadFile(fileUp,tb);
if (tb.Enabled == true && fileUp.Enabled == true)
{
statlbl.Text = "[status]";
}
else
{
statlbl.Text = "Uploaded";
}
}
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
}
public static Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
{
return root;
}
foreach (Control c in root.Controls)
{
Control t = FindControlRecursive(c, id);
if (t != null)
{
return t;
}
}
return null;
}
protected void UploadFile(FileUpload xyz, Button btn)
{
if (xyz.HasFile)
{
string extension = System.IO.Path.GetExtension(xyz.FileName);
if (extension == ".dat" || extension == ".B60")
{
if (File.Exists(Server.MapPath("~\\") + xyz.FileName))
{
Label1.Text = "File " + xyz.FileName + " Already Exists!";
}
else
{
xyz.PostedFile.SaveAs(Server.MapPath("~\\") + xyz.FileName);
Label1.Text = "The " + xyz.FileName + " Has been uploaded";
btn.Enabled = false;
xyz.Enabled = false;
}
}
else
{
Label1.Text = "* You can select only '.dat' & '.B60' type files";
btn.Enabled = true;
xyz.Enabled = true;
}
}
else
{
Label1.Text = "Select a file";
}
}
}
请帮助我!!! Thanx in Advance ...
答案 0 :(得分:0)
为什么不在按钮的命令参数中存储行ID,然后在单击按钮时,您可以使用此循环遍历所有行,直到id匹配您要查找的行,例如
foreach (DateRow test in table.Rows)
if ((test.findcontrol(uploadbutton) as Button).commandArgument = (Sender as Button).commandArgumrnt
{
//do stuff here
}
else
{
\\ do nothing
}
希望这有帮助