I've already got the the point where I can save all inputs to a text file but now I would like to create another feature where I can update that file but only through the form itself
private void button_Click(object sender, RoutedEventArgs e)
{
string lb1 = "";
string lb = "";
//Removes listboxtitem object name
ListBoxItem mySelectedItem0 = listBox.SelectedItem as ListBoxItem;
ListBoxItem mySelectedItem1 = listBox1.SelectedItem as ListBoxItem;
if (mySelectedItem0 != null && mySelectedItem1 != null)
{
lb1 = mySelectedItem1.Content.ToString();
lb = mySelectedItem0.Content.ToString();
}
TextWriter saveText = new StreamWriter(#"D:\blah.txt");
saveText.Write("===================================[Receipt]===================================" + "\r\n");
saveText.Write("|Title:" + " " + comboBox.Text + "\r\n");
saveText.Write("|Surname:" + " " + textBox1.Text + "\r\n");
saveText.Write("|Forname:" + " " + textBox2.Text + "\r\n");
saveText.Write("|Passanger[s]:" + " " + textBox6.Text + "\r\n");
saveText.Write("|Group:" + " " + checkBox.IsChecked + " " + "No: " + textBox4.Text + "\r\n");
saveText.Write("|Class:" + " " + comboBox1.Text + "\r\n");
saveText.Write("|Luggage:" + " " + textBox7.Text + "\r\n");
saveText.Write("|Suitcase:" + " " + checkBox1.IsChecked + " " + "No: " +textBox5.Text + "\r\n");
saveText.Write("|Departure On:" + " " + DatePicker.Text + " " + "At:" + " " +comboBox2.Text + "\r\n");
saveText.Write("|Destination From:" + " " + lb + " " + "To:" + " " + lb1 + "\r\n");
saveText.Write("===================================[Receipt]===================================");
saveText.Close();
File.AppendAllText(#"D:\blah.txt", Environment.NewLine);
}
so here it safes all inputs and values as strings into a blah.txt file, how can I now retrieve all information from the file into the form and update it?
You can read the entire content of a text file by using ReadAllText function. Also, you can condense your text construction:
String ticketText = String.Format(#"
===================================[Receipt]====================================
|Title: {0}
|Surname: {1}
|Forname: {2}
...
...
", comboBox.Text, textBox1.Text, textBox2.Text, ...);
saveText.Write(ticketText);
This way of constructing your text is better since everything is done at once and it is easier to read. This will be made even easier when with interpolated strings.
Also I recommend naming your control by their meaning: e.g. txtTitle or TitleText for Title.
In your code you are using 2 different methods to write to a file in one process. You use a StreamWriter to save the receipt. And then static File.AppendAllText to attach an empty line. No need to do that. I think it would be better to generate the message in a separate method and then use the static File.AppendAllText to save everything in one go:
private string GetReceipt()
{
StringBuilder receiptBuilder = new StringBuilder();
receiptBuilder.AppendLine("===================================[Receipt]===================================");
receiptBuilder.AppendLine("|Title:" + " " + comboBox.Text);
receiptBuilder.AppendLine("|Surname:" + " " + textBox1.Text);
receiptBuilder.AppendLine("|Forname:" + " " + textBox2.Text);
receiptBuilder.AppendLine("|Passanger[s]:" + " " + textBox6.Text);
receiptBuilder.AppendLine("|Group:" + " " + checkBox.IsChecked + " " + "No: " + textBox4.Text);
receiptBuilder.AppendLine("|Class:" + " " + comboBox1.Text);
receiptBuilder.AppendLine("|Luggage:" + " " + textBox7.Text);
receiptBuilder.AppendLine("|Suitcase:" + " " + checkBox1.IsChecked + " " + "No: " + textBox5.Text);
receiptBuilder.AppendLine("|Departure On:" + " " + DatePicker.Text + " " + "At:" + " " + comboBox2.Text);
receiptBuilder.AppendLine("|Destination From:" + " " + lb + " " + "To:" + " " + lb1);
receiptBuilder.AppendLine("===================================[Receipt]===================================");
receiptBuilder.AppendLine();
return receiptBuilder.ToString();
}
And then save to the file:
File.AppendAllText(filePath, GetReceipt());
With this small refactoring you can now easily achieve first part of your request: Updating the existing file.
When you need to update the file with new data you simply invoke the GetReceipt() and append the results.
Or if you need the old file to be erased then you can use WriteAllText instead:
File.WriteAllText(filePath, GetReceipt());
Now the reading of the file. Depends what you need. If you just read the text and display it in a text box then it's fairly easy. Just use ReadAllText
myTextBox.Text = File.ReadAllText(filePath);
However if you want to display it in appropriate combo boxes and text boxes then you would have to manually read the file. But if that's the case then I'd encourage you to refactor your code a little bit:
Create a class that holds all the information of the receipt. Each time you want to save your data create a new instance of this class and then serialize it (or save to a database) so it's easy to retrieve specific fields. If you still want to have a nice way to display a receipt you can override the ToString method.
Related
How can I show the Debug.Log in 2 lines (like adding an enter or <br>) in C#?
I have lots of info to show and compare, yet it is not convenient to read it in one line.
Current result: Debug.Log("Pointer:" + " " + pointerPosX + " " + pointerPosY + " " + "target" + " " + targetPosX + " " + targetPosY);
Expected result:
Pointer: pointerPosX + " " + pointerPosY
Target: targetPosX " " " + targetPosY
P.S. This is my first question in StackOverflow - so, please, let me know if I did something wrong.
Option 1 (\n):
Debug.Log("Pointer:" + " " + pointerPosX + " "
+ pointerPosY + "\n" + "Target:" + " " + targetPosX + " " + targetPosY);
Option 2 (System.Environment.NewLine):
Debug.Log("Pointer:" + " " + pointerPosX + " " + pointerPosY +
System.Environment.NewLine + "Target:" + " " + targetPosX + " " + targetPosY);
Using $ - string interpolation
Option 1:
Debug.Log($"Pointer: {pointerPosX} {pointerPosY}\nTarget: {targetPosX} {targetPosY}");
Option 2:
Debug.Log($"Pointer: {pointerPosX} {pointerPosY}{System.Environment.NewLine}Target: {targetPosX} {targetPosY}");
Difference between "\n" and Environment.NewLine
listBox2.Items.Add(c[n].nume_proprietar + ", " + c[n].nume_catel + ", " + c[n].varsta + " ani , " + c[n].data_vaccin + " " + c[n].tip_vaccin);
Hi, I was wandering if i could insert a line in between " ani , " and c[n].data_vaccin so that my code will display on 2 different lines, obviously with the vallues i insert when i will run the program:
c[n].nume_proprietar ", " c[n].nume_catel ", " c[n].varsta + " ani , " and on another line
c[n].data_vaccin " " c[n].tip_vaccin
Insert Environment.NewLine where you want to breakline. It is environment specific and provides clarity over "\r\n" hence it's preferred to use.
listBox2.Items.Add(c[n].nume_proprietar + ", " + c[n].nume_catel + ", " + c[n].varsta + " ani ," + Environment.NewLine + c[n].data_vaccin + " " + c[n].tip_vaccin);
I am using Silverlight4 and Telerik Reporting Q3 2011. I am trying to Generate Reports of all Outlets.
I used Table to display its fields. And I want to Display Full Address in same cell.
How could I?
I Used following Experession to display Full Address in same cell.
= Fields.AddressLine1
+ ", " + Fields.AddressLine2
+ ", " + Fields.Suburb
+ ", " + Fields.City
+ ", " + Fields.State
+ ", " + Fields.Country
I want do display this in same cell but want output like below..
=====================
Address
=====================
15A,
xxxx xxxRoad,
xxxxxx,
xxxxxxxx
====================
But I m getting this
=====================
Address
=====================
15A, xxxx xxxRoad, xxxxxx, xxxxxxxx
=====================
How do I get Output Which I want?
Use Environment.NewLine for getting into new line, see below
=Fields.AddressLine1 + ", "
+ Environment.NewLine + Fields.AddressLine2 + ", "
+ Environment.NewLine + Fields.Suburb + ", "
+ Environment.NewLine + Fields.City + ", "
+ Environment.NewLine + Fields.State + ", "
+ Environment.NewLine + Fields.Country;
EDIT
Refer to the link how to insert a newline in Textblock in silverlight
Have you tried using \n or \r\n in your strings wherever you want to do line breaks?
Yes Got it.....
I made the Function NewLineFeeds() in this function I used Replace() Method to replace the specific string to newLine(\n) .
public static string NewLineFeeds(string text)
{
string result = text.Replace(", ", "\n");
result = result.Replace(", ", "\n");
result = result.Replace(", ", "\n");
return result;
}
and my Expression is
=NewLineFeeds(Fields.AddressLine1
+ ", " + Fields.AddressLine2
+ ", " + Fields.Suburb
+ ", " + Fields.City
+ ", " + Fields.State
+ ", " + Fields.Country)
This call the Function NewLineFeeds() and replace ", " to \n (new Line).
Add this will work Fine..
Use complete name System.Environment.NewLine and it will work.
I just confirmed it in my report.
I am trying to include the text written by enduser in a textfield in an InfopathForm (textfield,multiline,paragraphbreaks and scroll bar if necessary) in an email to the relevant Department.
I always get this error "The name 'remarkmain' does not exist in the current context"
these are some parts of the code i used to define and include in mail:
string remarkmain = xnMyForm.SelectSingleNode("/my:myFields/my:field104", ns).Value;
string BodyAcc = "New Internal Employee " + Titlee + " " + fullname + ".\n Employee is joining " + Comp + " as of " + HireDate + ".\n\n Please view the general information below:\n " + bodyHD + "\n" + bodyED + "\n" + bodyDOB + "\n" + bodytitle + "\n" + bodylast + "\n" + bodyname + "\n" + bodyLang + "\n" + bodyComp + "\n" + bodydep + "\n" + bodyPos + "\n" + Bankacc + "\n" + add + "\n" + CostCtreVZW + "\n" + CostCtreCVBA + "\n\nWork Schedule\n" + WorkMon + "\n" + WorkTue + "\n" + WorkWed + "\n" + WorkThurs + "\n" + WorkFri + "\n" + WorkFDSch + "\n\n" + ContractN + "\n" + EmpN + "\n" + MGR + "\n" + Teamlead +"\n\n" **+ remarkmain** + "\n\n";
I am new to c# and this form i m creating in Infopath ( 2007 )
Have you considered submitting certain values to a form library and using sharepoint workflows via sharepoint designer to send the mail? The sharepoint workflow variable selection and general interface is generally expansive and pleasant and the functionality is extensive.
See to that strign BodyAcc="New Internal Employee+....remarkmain+....; is in remarkmain scope
Use StringBuilder if you have too many string concatinations
StringBuilder BodyAcc = new StringBuilder
BodyAcc.Append(New Internal Employee);
BodyAcc.Append("\n");
BodyAcc.Append(remarkmain);
I am creating a form in ASP.NET C# so it can be filled out and emailed to multiple recipients. Part of the form is a checkbox section with multiple options. I can only get the first option selected to be emailed back to the recipients, so if the user selects two or more checkboxes, it only emails the first option. Below is my code sheet
SmtpClient smtpClient = new SmtpClient();
MailMessage message = new MailMessage();
MailAddress From = new MailAddress(mailTextBox.Text);
message.To.Add(new MailAddress("email#domain.com"));
message.Subject = (companyTextBox.Text);
message.IsBodyHtml = true;
message.Body = "<html><head></head><body>" +
"<p></p>" +
"<p>Business Type: " + typeDropDownList.Text + "</p>" +
"<p>Company: " + companyTextBox.Text + "</p>" +
"<p>Name: " + nameTextBox.Text + "</p>" +
"<p>Address: " + addressTextBox.Text + "</p>" +
"<p>City: " + cityTextBox.Text + "</p>" +
"<p>State: " + stateDropDownList.Text + "</p>" +
"<p>Zip Code: " + zipcodeTextBox.Text + "</p>" +
"<p>Phone Number: " + phoneTextBox.Text + "</p>" +
"<p>Email: " + mailTextBox.Text + "</p>" +
"<p>Number Of Locations: " + locationsDropDownList.Text + "</p>" +
**// This is my problem area //**
"<p>Interested In: " + interestedCheckBoxList.Text + "</p>" +
"<p>Interested In: " + interestedCheckBoxList.Text + "</p>" +
"<p>Interested In: " + interestedCheckBoxList.Text + "</p>" +
**// This is my problem area //**
"<p>Message: " + messageTextBox.Text + "</p>" +
"</body></html>";
smtpClient.Send(message);
Response.Redirect("http://www.domain.com");
Thank you in advance.
Jim
You will need to loop through the Items in the CheckBoxList and add them individually.
Example:
foreach(ListItem li in interestedCheckBoxList.Items)
{
//add your stuff
if(li.Selected)
{
//should be using string builder here but....
message.Body += "<p>Interested In: " + li.Text + "</p>";
}
}
You need to iterate through your CheckBoxList and find all the checked items and get the Text property for each item and append to you email text.
string yourSelectedList = "";
foreach (ListItem i in chklst.Items)
{
if (i.Selected)
yourSelectedList += (i.Text + ", ");
}
Then remove the extra comma at the end :)
"<p>Interested In: " + yourSelectedList + "</p>" +
Try to use StringBuilder when concatentating many strings together as it will make a big difference.
Try replacing the code in your "problem area" with the following:
string InterestedIn = "";
foreach (ListItem li in interestedCheckBoxList.Items)
{
if (li.Selected)
InterestedIn += "<p>Interested In: " + li.Text + "</p>";
}
Of course, you can't concatenate this as part of your original string concatenation, so build an "InterestedIn" string of sorts and concatenate the email body with that.