Having dynamically created label on separate lines - c#

The following method is used by me to create a set of dynamic widgets on a button click and display the contents of an array in the labels!
public void addLabel()
{
for (int i = 0; i < array.Length; i++)
{
Label lbl = new Label();
lbl.Text = array[i]+"\n";
lbl.AutoSize = true;
flowLayoutPanel1.Controls.Add(lbl);
}
}
The problem I face is that some labels display on the same line but I want only one label in each line! How can I modify my code?

You should use flowLayoutPanel1.SetFlowBreak(lbl, true); like this:
for (int i = 0; i < array.Length; i++)
{
Label lbl = new Label();
lbl.Text += array[i] + "\n";
lbl.AutoSize = true;
flowLayoutPanel1.Controls.Add(lbl);
flowLayoutPanel1.SetFlowBreak(lbl, true);
}
However currently you are creating the label in each iteration of the loop. If you just need one label with line breaks you can change your code like below:
Label lbl = new Label();
for (int i = 0; i < array.Length; i++)
{
lbl.Text += array[i] + "\n";
}
lbl.AutoSize = true;
flowLayoutPanel1.Controls.Add(lbl);

You can use this. This is simple...
public void addLabel()
{
for (int i = 0; i < array.Length; i++)
{
Label lbl = new Label();
lbl.Text = array[i] + "\n";
lbl.AutoSize = true;
flowLayoutPanel1.Controls.Add(lbl);
flowLayoutPanel1.FlowDirection = FlowDirection.TopDown;
}
}

Try this
int lblStartPosition = 100;
int lblStartPositionV = 25;
for (int i = 0; i < array.Length; i++)
{
Label lbl = new Label();
lbl.Text = array[i]+"\n";
lbl.AutoSize = true;
lbl.Location = new System.Drawing.Point(lblStartPosition , lblStartPositionV);
flowLayoutPanel1.Controls.Add(lbl);
lblstartPositionV += 30;
}

Related

Iterate through list of labels and assign text through the code behind

The labels aren't populating with text and I'm not sure why. I need lbl0 to lbl6 filled with an incremented year.
int year= Convert.ToInt32(hdnYear.Value);
List<Label> lbl = new List<Label>();
for (int i = 0; i < 6; i++)
{
Label lbls = new Label();
lbl.Add(lbls);
int yearValue = (FY + i);
string lblID = "lbl" + i;
lbl[i].ID = lblID;
lbl[i].Text = yearValue.ToString();
}
you want to do something like this:
List<Label> labels = new List<Label>();
for(int i = 0; i < 6; i++)
{
Label newLabel = new Label();
//set Properties of newLabel like ID, Content etc
labels.Add(newLabel);
}
fyi: A TextBlock has a Text property, a Label has Content property

Creating Labels at run time from a variable

Im trying to create a label in runtime. the number of labels depends on the number of items of another variable and the labels do not show. The code is as follows.
int NoofItems = tillfrm.lvbasket.Items.Count;
for (int i = 0; i < NoofItems + 1; i++)
{
Label lblitems = new Label();
lblitems.Name = "lblItems" + i;
lblitems.Font = new Font ("Calibri",lblitems.Font.Size);
lblitems.Location = new Point(95, (152 + (19 * i)));
lblitems.ForeColor = System.Drawing.Color.Black;
lblitems.Show();
lblitems.AutoSize = true;
lblitems.Text = tillfrm.lvbasket.Items[0].Text;
this.Controls.Add(lblitems);
}
some help would be appreciated thanks.
You should change tillfrm.lvbasket.Items[0].Text to tillfrm.lvbasket.Items[i].Text.
And i < NoofItems + 1 to i < NoofItems, because array size is NoofItems.
Try it like this, create a function, make the array GLOBAL,
protected void myFunction()
{
int NoofItems = tillfrm.lvbasket.Items.Count;
for (int i = 0; i < NoofItems; i++)
{
Label lblitems = new Label();
lblitems.Name = "lblItems" + i;
lblitems.Font = new Font ("Calibri",lblitems.Font.Size);
lblitems.Location = new Point(95, (152 + (19 * i)));
lblitems.ForeColor = System.Drawing.Color.Black;
lblitems.Show();
lblitems.AutoSize = true;
lblitems.Text = tillfrm.lvbasket.Items[i].Text;
this.Controls.Add(lblitems);
}
}
Then call this function in Form_load() function or Page_load() function like this
protected void Form_Load(Object sender , EventArgs e)
{
myFunction();
}

Dynamic rows on table c#

two part question:
1:
I am using a session state refresh to hold count of the page reloads but when using a series of if statements the validation isn't working. Code at the bottom. What am I doing wrong?
2:
Using session state against postback doesn't appear to be the most efficient method of doing this, if I added another table with the same functionality, the count would affect both tables.
For example if I only wanted people to be able to add a maximum of three rows to a table, on two tables, they would only be able to add four rows in total.
What would be a better method of storing a count for separate refreshes?
Update
I have found the issue with the code not adding rows to the existing but I'm unsure of how to fix it.
Basically each iteration is deleting the existing row then adding a single row again. So there will never be more than one row.
Any ideas?
namespace FormTest
{
public partial class About : Page
{
protected void Page_Load(object sender, System.EventArgs e)
{
tbl.BorderStyle = BorderStyle.Inset;
tbl.BorderWidth = Unit.Pixel(1);
if (!Page.IsPostBack)
{
Session["count"] = 0;
}
else
{
int count = (int)Session["count"];
count++;
Session["count"] = count;
}
}
protected void cmdCreate_Click(object sender, System.EventArgs e)
{
tbl.Controls.Clear();
int rows = 1;
int cols = 4;
if ((int)Session["count"] == 0)
{
for (int i = 0; i < rows; i++)
{
TableRow rowNew = new TableRow();
tbl.Controls.Add(rowNew);
for (int j = 0; j < cols; j++)
{
TableCell cellNew = new TableCell();
Label lblNew = new Label();
lblNew.Text = "(" + i.ToString() + "," + j.ToString() + ")<br />";
TextBox tbNew = new TextBox();
cellNew.Controls.Add(lblNew);
cellNew.Controls.Add(tbNew);
rowNew.Controls.Add(cellNew);
}
}
}
else
{
if ((int)Session["count"] == 1)
{
for (int i = 0; i < rows; i++)
{
TableRow rowNew = new TableRow();
tbl.Controls.Add(rowNew);
for (int j = 0; j < cols; j++)
{
TableCell cellNew = new TableCell();
Label lblNew = new Label();
lblNew.Text = "(" + i.ToString() + "," + j.ToString() + ")<br />";
TextBox tbNew = new TextBox();
cellNew.Controls.Add(lblNew);
cellNew.Controls.Add(tbNew);
rowNew.Controls.Add(cellNew);
}
}
}
else
{
if ((int)Session["count"] == 2)
{
for (int i = 0; i < rows; i++)
{
TableRow rowNew = new TableRow();
tbl.Controls.Add(rowNew);
for (int j = 0; j < cols; j++)
{
TableCell cellNew = new TableCell();
Label lblNew = new Label();
lblNew.Text = "(" + i.ToString() + "," + j.ToString() + ")<br />";
TextBox tbNew = new TextBox();
cellNew.Controls.Add(lblNew);
cellNew.Controls.Add(tbNew);
rowNew.Controls.Add(cellNew);
}
}
}
else
{
if ((int)Session["count"] == 3)
{
for (int i = 0; i < rows; i++)
{
TableRow rowNew = new TableRow();
tbl.Controls.Add(rowNew);
for (int j = 0; j < cols; j++)
{
TableCell cellNew = new TableCell();
Label lblNew = new Label();
lblNew.Text = "(" + i.ToString() + "," + j.ToString() + ")<br />";
TextBox tbNew = new TextBox();
cellNew.Controls.Add(lblNew);
cellNew.Controls.Add(tbNew);
rowNew.Controls.Add(cellNew);
}
}
}
else
{
Response.Redirect("http://www.google.co.uk");
}
}
}
}
}//end cmdCreate_Click
}
}
You don't need a list of if conditions, you just need to ensure the number of rows is less than your desired limit. You also should store the limit per table to avoid your count clashing if/when more tables are added.
This is how I would do it:
(note: This won't work "as-is" - I've assumed you've removed the code to assign tbl within cmdCreate_Click()and have left it as is for clarity)
namespace FormTest
{
public partial class About : Page
{
private int myFirstTableMaxRows = 3;
protected void Page_Load(object sender, System.EventArgs e)
{
tbl.BorderStyle = BorderStyle.Inset;
tbl.BorderWidth = Unit.Pixel(1);
if (!Page.IsPostBack)
{
Session["myFirstTable_count"] = "0";
}
else
{
int count = (int)Session["myFirstTable_count"];
Session["myFirstTable_count"] = ++count;
}
}
protected void cmdCreate_Click(object sender, System.EventArgs e)
{
tbl.Controls.Clear();
int cols = 4;
int currentRowCount = (int)Session["myFirstTable_count"];
if(currentRowCount <= myFirstTableMaxRows)
{
TableRow rowNew = new TableRow();
tbl.Controls.Add(rowNew);
for (int j = 0; j < cols; j++)
{
TableCell cellNew = new TableCell();
Label lblNew = new Label();
lblNew.Text = "(" + i.ToString() + "," + j.ToString() + ")<br />";
TextBox tbNew = new TextBox();
cellNew.Controls.Add(lblNew);
cellNew.Controls.Add(tbNew);
rowNew.Controls.Add(cellNew);
}
}
else
{
Response.Redirect("http://www.google.co.uk");
}
}//end cmdCreate_Click
}
Update after question edit
The existing rows will go due to this line in the code:
tbl.Controls.Clear();
The table is being cleared, then a single row is added per the logic in the cmdCreate_Click() method.

How can I get ID's of Dynamically generated Controls?

Hiiii,
In the following image the table & controls in it are generated dynamically.
Table is created onclick of "create table" button using values from dropdownlist which has no. of rows as values.
How can I get particular “Fileupload” & “Upload” button’s ID.
On click of “upload” button only fileupload control in same row as of that button should be accessed & it should not loop through all the fileupload controls in the table.
In my code, when I click Upload button in lower rows(say 3rd row) then it uploads the file selected in upper fileupload controls( here 1st n 2nd row along with 3rd row ) also.
I don’t want this. I just want to upload file from filupload control in the same row of clicked button.
CODE :
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";
}
}
}
plz Help me Out !!!
Thanx in Advance...
why not store a Row ID in the command argument for the button and then when the button is click you can use this to loop through all the rows untill the id matchs the row you are looking for, for example
foreach (DateRow test in table.Rows)
if ((test.findcontrol(uploadbutton) as Button).commandArgument = (Sender as Button).commandArgumrnt
{
//do stuff here
}
else
{
\\ do nothing
}
Hope this helps

How to create list of checkboxes with scroll?

I'm trying this code:
arrList = new List<CheckBox>();
for (int j = 0; j < 20; j++)
{
CheckBox check = new CheckBox();
arrList.Add(check);
}
CheckBox[] cb = arrList.ToArray();
for (int i = 0; i < 20; i++)
{
cb[i].Text = "sometext";
cb[i].Location = new System.Drawing.Point(10, 15 + i * 20);
cb[i].BackColor = System.Drawing.Color.Silver;
cb[i].Name = "somename";
cb[i].Size = new System.Drawing.Size(59, 17);
cb[i].Checked = true;
groupBox1.Controls.Add(cb[i]);
}
How can I add a vertical scroll bar there? (maybe I should use something instead of groupbox?)
You could use a Panel control and set it's AutoScroll property to True

Categories