I've been struggling with this C# problem all night.
I have a override ToString(), which is working fine, and I can put my data out in a ListBox. But as the data is very long, with a bunch of classes, the output becomes long.
I wanted to be able to break my ListBox output into multiplelines.
Here is the override in the class file:
//ToString
public override string ToString()
{
return "Name " + firstName + lastName + ". Nationality " + nationality + ". Lives in " + address + " " + zipCode + " " + city + " " + country + "."//
+ " Height is " + height + " meters. Hair color is " + hairColor + " and eye color is " + eyeColor + ". Specialmarkings: "//
+ specialMark + ". Is associated with " + association + ". Codename is " + codeName + "Photo (filename): " + photo;
}
Here is the index code:
public partial class Index : System.Web.UI.Page
{
static ArrayList personarraylist;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
personarraylist = new ArrayList();
}
}
protected void ButtonCreate_Click(object sender, EventArgs e)
{
//create new object
Person p = new Person(TextBox1FirstName.Text, TextBox2LastName.Text, TextBox3Nation.Text, TextBox4Address.Text, //
TextBox5City.Text, TextBox7Country.Text, //
TextBox10HairColor.Text, TextBox11EyeColor.Text, TextBox12SpecialMark.Text, TextBox13Asso.Text, TextBox14Codename.Text, TextBox15Photo.Text, //
Convert.ToDouble(TextBox9Height.Text), Convert.ToInt32(TextBox6ZipCode.Text), Convert.ToInt32(TextBox8Pass.Text));
//add object to arraylist
personarraylist.Add(p);
}
protected void ButtonShow_Click(object sender, EventArgs e)
{
//clear list box
ListBox1.Items.Clear();
//loop through Arraylist
for (int i = 0; i < personarraylist.Count; i++)
{
ListBox1.Items.Add(personarraylist[i].ToString());
ListBox1.Items.Add("");
TextBox1.Text = "";
}
}
}
Is it possible to break the output in multiplelines in a ListBox?
I was trying to inject some html breaktags in the override return, but these get stripped, yeah this is a webapplication.
Thanks in advance for your time.
PS I am a newbie in C# (Student), so be kind ;)
UPDATE:
Hi again all, thx for the help, I already tried with Environment.Newline and the other solutions, but these seem to be overlooked when displaying the text in a ListBox. I can see the breakpoints in the codebehind, but in the browser the listbox still just keeps it all in one line. So I decided to use a TextBox instead, which breaks the text automaticly and where I point out.
//loop through Arraylist
for (int i = 0; i < personarraylist.Count; i++)
{
TextBox1.Text += personarraylist[i].ToString();
}
Again thx for the help :-)
You can use Environment.NewLine or simply "\n" to create multiple lines of text.
If that doesn't work, you can try using the DataList control:
<asp:DataList id="myDataList" runat="server">
<ItemTemplate>
Line 1
<br />
Line 2
</ItemTemplate>
</asp:DataList>
Related
I was wondering how to do like the below image:
In 'Summary' (on right), under 'You purchased:', I want to list the options user has checked in 'Available Books' (on left)
private void btnPurchase_Click(object sender, EventArgs e)
{
string BOOKS;
MessageBox.Show("You Purchase :\n"
+"\t" + BOOKS + "\n" //checked checkbox shows here
+ "The selected payment method is : " + payment
+ "\nYour comment about us : " + txtKomen.Text);
}
I use the code above, and it only show the first checked checkbox, how to add another checked checkbox in message box?
Should I use an array for the BOOKS? If that is the way, how to loop it into the messagebox?
You can do it like this:
private void btnPurchase_Click(object sender, EventArgs e)
{
string[] BOOKS;
var sb = new StringBuilder();
foreach(var item in BOOKS)
{
sb.Append($"\t{item}");
sb.AppendNewLine();
}
MessageBox.Show("You Purchase :\n"
+ sb.ToString()//checked checkbox shows here
+ "The selected payment method is : " + payment
+ "\nYour comment about us : " + txtKomen.Text);
}
Though I'm not sure if .Append and .AppendNewLine() exist in StringBuilder, they might have a different name in any case Visual Studio should tell you the correct name.
private void button1_Click(object sender, EventArgs e)
{
string books = "";
foreach (var itemChecked in checkedListBox1.CheckedItems)
{
books += itemChecked + " ";
}
MessageBox.Show("You Purchase :\n" + "\t" + books + "\n");
}
If you want to use this you have to add CheckedListBox on your form.
I currently have a form which takes in 3 user inputs from 2 textboxes and 1 numericUpDown.
I want to be able to get the values put in here when a button is clicked, and display the value of all 3 into a seperate text box.
The issue arises when there is multiple additions.
I tried creating an array but it still only displays the last input.
private void AddButton_Click(object sender, EventArgs e)
{
string newItem = NameTextBox.Text + "\t" + QuantityBox.Value.ToString() + "\t" + PriceBox.Text;
List<String> newItemList = new List<string>();
newItemList.Add(newItem);
for(int i = 0; i < newItemList.Count; i++)
{
BasketBox.Text = newItemList[i] + "\n";
}
}
Make your list outside the function, so u can maintain the list of inputs,
and display updated list on every click.
List<String> newItemList = new List<string>();
private void AddButton_Click(object sender, EventArgs e)
{
string newItem = NameTextBox.Text + "\t" + QuantityBox.Value.ToString() + "\t" + PriceBox.Text;
newItemList.Add(newItem);
for(int i = 0; i < newItemList.Count; i++)
{
BasketBox.Text = newItemList[i] + "\n";
}
}
You can do it like this:
private void AddButton_Click(object sender, EventArgs e)
{
string newItem = NameTextBox.Text + "\t" + QuantityBox.Value.ToString() + "\t" + PriceBox.Text;
List<String> newItemList = new List<string>();
newItemList.Add(newItem);
for(int i = 0; i < newItemList.Count; i++)
{
BasketBox.Text += newItemList[i] + "\n"; // this will add the text to your box
}
}
This will 'erase' old text in BasketBox:
BasketBox.Text = newItemList[i] + "\n"
This will add text in BasketBox:
BasketBox.Text += newItemList[i] + "\n"
There is a cool method String.Join which does the concatenation of string items from a list in one blow:
BasketBox.Text = String.Join(Environment.NewLine, newItemList);
If you declare the list outside than each time the button is clicked an item will be added to it and all items will be displayed:
List<String> newItemList = new List<string>();
private void AddButton_Click(object sender, EventArgs e)
{
string newItem = NameTextBox.Text + "\t" + QuantityBox.Value.ToString() + "\t" + PriceBox.Text;
newItemList.Add(newItem);
BasketBox.Text = String.Join(Environment.NewLine, newItemList);
}
Edit:
This of course will only work if you have set the property Multiline to true.
I am implementing a grid view and putting a textbox in the Headers to be able to filter the data for each column. I have the following code for the ontextchanged trigger for every textbox.
protected void Filter_TextChanged(object sender, EventArgs e)
{
string ColumnName = ((TextBox)sender).Attributes["EventArg"];
string FilterValue = ((TextBox)sender).Text;
if (string.IsNullOrEmpty(FilterValue))
{
EntityDataSource1.Where = "";
}
else
{
int dummy;
if (int.TryParse(FilterValue, out dummy))
{
EntityDataSource1.Where = "it." + ColumnName + " = " + FilterValue;
}else
{
EntityDataSource1.Where = "it." + ColumnName + " Like '%" + FilterValue + "%'";
}
}
}
The aspx is as follows
<asp:TextBox ID="txtCaseNr" runat="server" CssClass="form-control" OnTextChanged="Filter_TextChanged" AutoPostBack="true" TextMode="Number"></asp:TextBox>
Everything works so far except that to prevent text being written at textboxes expecting integers i set the textmode=number. And it is not being triggered when the textbox is emptied to remove the filter.
I hope my problem is clear. Any solutions are welcome.
Thanks,
I have to pass two query strings that i've entered and display them on another page.
Here is the code where i attempt to pass them.
protected void btnDisplay_Click(object sender, EventArgs e)
{
string vacations = Session["Vacations"] as string;
string hobbies = Session["Hobbies"] as string;
string classes = Session["Classes"] as string;
lblDisplay.Text = "Your favorite vacations spots are: " + vacations + "<br />" +
"Your hobbies are: " + hobbies + "<br />" +
"Your IT Classes are: " + classes;
}
protected void btnRedirect_Click(object sender, EventArgs e)
{
string vacations = Request.QueryString["vacations"];
Response.Redirect("Summary2.aspx?vacations=" + vacations);
}
Here is where I attempt to retrieve and display them.
protected void btnDisplay_Click(object sender, EventArgs e)
{
lblDisplay.Text = Request.QueryString["vacations"];
}
I can't figure out what I am doing wrong. When i hit the Display button on my 2nd page, nothing shows up. Which I am assuming I am not passing the information correctly.
PS The information that is trying to be passed is the session states on the stop of my code. I only need to send the vacations and the classes through the query string.
you need to take the vacations value from session. you're reading it from the query string on the first page.
protected void btnRedirect_Click(object sender, EventArgs e)
{
string vacations = Session["vacations"] as string; // this line
string classes = Session["vacations"] as string;
Response.Redirect("Summary2.aspx?vacations=" + vacations + "&classes=" + classes);
}
I think you want to send two parameters. (Your question is a little confused)
I hope this can help you.
So, In your webForm 1, add one button and write this small code:
Session["Vacations"] = "sample 1";
Session["variable2"] = "variable 2";
string vacations = Session["Vacations"] as string;
string variable2 = Session["variable2"] as string;
string myquery = vacations + "/" + variable2;
Response.Redirect("WebForm2.aspx?myquery=" + myquery);
In your webForm 2, In the "load" event add this code:
string data = Request.QueryString["myquery"];
string[] words = data.Split('/');
foreach (string word in words)
{
Response.Write(word);
}
It is a way to pass two parameters between two web pages.
This program have a link which is fixed and never change. And it contains 5 textboxes. The fixed link is:
<seite>utm_source=<website>_<page>_de&utm_medium=banner&utm_campaign=<kampagne>&utm_content=<format>
Every value in <> should be changed by textbox value. Here you got an image of my little program:
Now my problem is: the first value is correct, but the other values aren't. So for example, if i type in second texbox: "website" it does not only replace <website> with "website". it replaced <website> with System.Windows.Forms.TextBox, Text: website.
My Code I tried:
private void btn_SendAll_Click(object sender, EventArgs e)
{
txt_FinishLink.Text = txt_Site.Text + "utm_source=" + txt_Website + "_" + txt_Page + "_de&utm_medium=banner&utm_campaign=" + txt_Campaign + "&utm_content=" + txt_Format;
}
As pointed out in the comments, the Text property of the TextBox needed to be used:
txt_FinishLink.Text = txt_Site.Text + "utm_source=" + txt_Website.Text + "_" + txt_Page.Text + "_de&utm_medium=banner&utm_campaign=" + txt_Campaign.Text + "&utm_content=" + txt_Format.Text
Text will return the string of characters in the specified TextBox.
private void btn_SendAll_Click(object sender, EventArgs e)
{
txt_FinishLink.Text = txt_Site.Text + "utm_source=" +
txt_Website.Text + "_" +
txt_Page.Text + "_de&utm_medium=banner&utm_campaign=" +
txt_Campaign.Text + "&utm_content=" +
txt_Format.Text;
}
Look at string.Format though, it makes it much easier to see the format of the new url:
private void btn_SendAll_Click(object sender, EventArgs e)
{
txt_FinishLink.Text = string.Format(
"{0}utm_source={1}_{2}_de&utm_medium=banner&utm_campaign={3}&utm_content={4}",
txt_Site.Text, //{0}
txt_Website.Text, //{1} etc.
txt_Page.Text,
txt_Campaign.Text,
txt_Format.Text);
}
Then you may want to consider encoding the text before placing in the URL, see this answer https://stackoverflow.com/a/16894322/360211