如何修复winformc#中字符串生成器字符串的长度
本文关键字:字符串 何修复 winformc# | 更新日期: 2023-09-27 18:15:44
在我的项目中,我使用StringBuilder
在RichEditBox
中创建一个表。但在我的专栏中,数据值彼此不同。所以它看起来像是经过洗牌的数据。但是我期望的输出是完全固定表中数据的长度。在我的输出中,我可以看到这个表已经正确地完成了。
谁能说如何在c#中固定StringBuilder
字符串的长度?
Connection();
try
{
string Today = "Student Test Mark Details";
string Line = "----------------------------------";
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
cmd = new SqlCommand("select ExaminationName, ExaminationCenter, ExaminationDate, Subjects, MarkObtained, Total, Percentage, Grade from StudentMarksHistory where StudentCode='" + ICBEStudentCode.Text + "' and ExaminationName='" + TBExaminationName.Text + "' and ClassName='" + ICBEClassSection.Text + "' and Remark='Record Saved'", cs);
StringBuilder paragraph = new StringBuilder();
SqlDataReader dr = cmd.ExecuteReader();
paragraph.Append(Today).Append("'t'n");
paragraph.Append(Line).Append("'t'n'n'n'n'n");
paragraph.Append("ExamName").Append("'t");
paragraph.Append("ExamCenter").Append("'t");
paragraph.Append("ExamDate").Append("'t");
paragraph.Append("Subject").Append("'t't't");
paragraph.Append("Mark").Append("'t");
paragraph.Append("Total").Append("'t");
paragraph.Append("Percentage").Append("'t");
paragraph.Append("Grade").Append("'n'n");
while (dr.Read())
{
DateTime DateName = Convert.ToDateTime(dr["ExaminationDate"]);
string subject = dr["Subjects"].ToString().Trim();
//int Len = subject.Length;
//subject = subject.ToString().PadRight(50 - Len, ' ');
paragraph.Append(dr["ExaminationName"].ToString()).Append("'t");
paragraph.Append(dr["ExaminationCenter"].ToString()).Append("'t");
paragraph.Append(DateName.ToString("dd/MM/yyyy")).Append("'t");
paragraph.Append(subject);
paragraph.Append(' ', 15 - subject.Length);
//paragraph.Append(subject.PadRight(100));
paragraph.Append(dr["MarkObtained"].ToString()).Append("'t");
paragraph.Append(dr["Total"].ToString()).Append("'t");
paragraph.Append(dr["Percentage"].ToString()).Append("'t");
paragraph.Append(dr["Grade"].ToString()).Append("'n");
}
string Notes = "************[ Minimum Pass Mark is 35 ]*************";
paragraph.Append(" ").Append("'n'n'n'n");
paragraph.Append(Notes).Append("'r'n");
dr.Close();
cs.Close();
}
RTBMessage.Text = paragraph.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
结果expceted:
Student Test Mark Details
----------------------------------
ExamName ExamCenter ExamDate Subject Mark Total
Class Test 1 Room No1 24/05/2013 STOREDPROCEDURE 97 404
Class Test 1 Room No1 25/05/2013 DOTNET 86 404
Class Test 1 Room No1 26/05/2013 TAMIL 80 404
Class Test 1 Room No1 23/05/2013 SOCIAL 80 404
Class Test 1 Room No1 27/05/2013 COMPUTER 61 404
************[ Minimum Pass Mark is 35 ]*************
不要使用制表符来对齐列,而是通过StringBuilder的AppendFormat方法使用复合格式
就像你的第一列的例子。
我认为ExamName
应该在一个大20个字符的列中左对齐插入。
你可以写
paragraph.AppendFormat("{0:20}","ExamName");
而对于Grade
列右对齐在6个字符的空间
paragraph.AppendFormat("{0:-6}'r'n", "Total");
当然,这种对齐取决于RichTextBox中使用的字体类型。如果您使用比例字体,则无法按您喜欢的方式对齐文本。
最后我真的建议你使用DataGridView来代替
由于数据的长度非常波动,不要添加制表符"'t",如果某些数据比tabsize
长,这将不起作用你可以使用
String.PadRight(Int32, Char)
方法,如果您知道您的最大期望数据长度。
记住用法:第一个参数描述的是总长度,而不是要填充的字符数
http://msdn.microsoft.com/en-us/library/66f6d830 (v = vs.71) . aspx